blob: da53613bc7bbeef5749ee9d5bbedeaa9a682433d [file] [log] [blame]
Ben Murdochda12d292016-06-02 14:46:10 +01001// 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_S390
6
7#include "src/s390/constants-s390.h"
8
9namespace v8 {
10namespace internal {
11
Ben Murdochc5610432016-08-08 18:44:38 +010012Instruction::OpcodeFormatType Instruction::OpcodeFormatTable[] = {
13 // Based on Figure B-3 in z/Architecture Principles of
14 // Operation.
15 TWO_BYTE_OPCODE, // 0x00
16 TWO_BYTE_OPCODE, // 0x01
17 TWO_BYTE_DISJOINT_OPCODE, // 0x02
18 TWO_BYTE_DISJOINT_OPCODE, // 0x03
19 ONE_BYTE_OPCODE, // 0x04
20 ONE_BYTE_OPCODE, // 0x05
21 ONE_BYTE_OPCODE, // 0x06
22 ONE_BYTE_OPCODE, // 0x07
23 ONE_BYTE_OPCODE, // 0x08
24 ONE_BYTE_OPCODE, // 0x09
25 ONE_BYTE_OPCODE, // 0x0a
26 ONE_BYTE_OPCODE, // 0x0b
27 ONE_BYTE_OPCODE, // 0x0c
28 ONE_BYTE_OPCODE, // 0x0d
29 ONE_BYTE_OPCODE, // 0x0e
30 ONE_BYTE_OPCODE, // 0x0f
31 ONE_BYTE_OPCODE, // 0x10
32 ONE_BYTE_OPCODE, // 0x11
33 ONE_BYTE_OPCODE, // 0x12
34 ONE_BYTE_OPCODE, // 0x13
35 ONE_BYTE_OPCODE, // 0x14
36 ONE_BYTE_OPCODE, // 0x15
37 ONE_BYTE_OPCODE, // 0x16
38 ONE_BYTE_OPCODE, // 0x17
39 ONE_BYTE_OPCODE, // 0x18
40 ONE_BYTE_OPCODE, // 0x19
41 ONE_BYTE_OPCODE, // 0x1a
42 ONE_BYTE_OPCODE, // 0x1b
43 ONE_BYTE_OPCODE, // 0x1c
44 ONE_BYTE_OPCODE, // 0x1d
45 ONE_BYTE_OPCODE, // 0x1e
46 ONE_BYTE_OPCODE, // 0x1f
47 ONE_BYTE_OPCODE, // 0x20
48 ONE_BYTE_OPCODE, // 0x21
49 ONE_BYTE_OPCODE, // 0x22
50 ONE_BYTE_OPCODE, // 0x23
51 ONE_BYTE_OPCODE, // 0x24
52 ONE_BYTE_OPCODE, // 0x25
53 ONE_BYTE_OPCODE, // 0x26
54 ONE_BYTE_OPCODE, // 0x27
55 ONE_BYTE_OPCODE, // 0x28
56 ONE_BYTE_OPCODE, // 0x29
57 ONE_BYTE_OPCODE, // 0x2a
58 ONE_BYTE_OPCODE, // 0x2b
59 ONE_BYTE_OPCODE, // 0x2c
60 ONE_BYTE_OPCODE, // 0x2d
61 ONE_BYTE_OPCODE, // 0x2e
62 ONE_BYTE_OPCODE, // 0x2f
63 ONE_BYTE_OPCODE, // 0x30
64 ONE_BYTE_OPCODE, // 0x31
65 ONE_BYTE_OPCODE, // 0x32
66 ONE_BYTE_OPCODE, // 0x33
67 ONE_BYTE_OPCODE, // 0x34
68 ONE_BYTE_OPCODE, // 0x35
69 ONE_BYTE_OPCODE, // 0x36
70 ONE_BYTE_OPCODE, // 0x37
71 ONE_BYTE_OPCODE, // 0x38
72 ONE_BYTE_OPCODE, // 0x39
73 ONE_BYTE_OPCODE, // 0x3a
74 ONE_BYTE_OPCODE, // 0x3b
75 ONE_BYTE_OPCODE, // 0x3c
76 ONE_BYTE_OPCODE, // 0x3d
77 ONE_BYTE_OPCODE, // 0x3e
78 ONE_BYTE_OPCODE, // 0x3f
79 ONE_BYTE_OPCODE, // 0x40
80 ONE_BYTE_OPCODE, // 0x41
81 ONE_BYTE_OPCODE, // 0x42
82 ONE_BYTE_OPCODE, // 0x43
83 ONE_BYTE_OPCODE, // 0x44
84 ONE_BYTE_OPCODE, // 0x45
85 ONE_BYTE_OPCODE, // 0x46
86 ONE_BYTE_OPCODE, // 0x47
87 ONE_BYTE_OPCODE, // 0x48
88 ONE_BYTE_OPCODE, // 0x49
89 ONE_BYTE_OPCODE, // 0x4a
90 ONE_BYTE_OPCODE, // 0x4b
91 ONE_BYTE_OPCODE, // 0x4c
92 ONE_BYTE_OPCODE, // 0x4d
93 ONE_BYTE_OPCODE, // 0x4e
94 ONE_BYTE_OPCODE, // 0x4f
95 ONE_BYTE_OPCODE, // 0x50
96 ONE_BYTE_OPCODE, // 0x51
97 ONE_BYTE_OPCODE, // 0x52
98 ONE_BYTE_OPCODE, // 0x53
99 ONE_BYTE_OPCODE, // 0x54
100 ONE_BYTE_OPCODE, // 0x55
101 ONE_BYTE_OPCODE, // 0x56
102 ONE_BYTE_OPCODE, // 0x57
103 ONE_BYTE_OPCODE, // 0x58
104 ONE_BYTE_OPCODE, // 0x59
105 ONE_BYTE_OPCODE, // 0x5a
106 ONE_BYTE_OPCODE, // 0x5b
107 ONE_BYTE_OPCODE, // 0x5c
108 ONE_BYTE_OPCODE, // 0x5d
109 ONE_BYTE_OPCODE, // 0x5e
110 ONE_BYTE_OPCODE, // 0x5f
111 ONE_BYTE_OPCODE, // 0x60
112 ONE_BYTE_OPCODE, // 0x61
113 ONE_BYTE_OPCODE, // 0x62
114 ONE_BYTE_OPCODE, // 0x63
115 ONE_BYTE_OPCODE, // 0x64
116 ONE_BYTE_OPCODE, // 0x65
117 ONE_BYTE_OPCODE, // 0x66
118 ONE_BYTE_OPCODE, // 0x67
119 ONE_BYTE_OPCODE, // 0x68
120 ONE_BYTE_OPCODE, // 0x69
121 ONE_BYTE_OPCODE, // 0x6a
122 ONE_BYTE_OPCODE, // 0x6b
123 ONE_BYTE_OPCODE, // 0x6c
124 ONE_BYTE_OPCODE, // 0x6d
125 ONE_BYTE_OPCODE, // 0x6e
126 ONE_BYTE_OPCODE, // 0x6f
127 ONE_BYTE_OPCODE, // 0x70
128 ONE_BYTE_OPCODE, // 0x71
129 ONE_BYTE_OPCODE, // 0x72
130 ONE_BYTE_OPCODE, // 0x73
131 ONE_BYTE_OPCODE, // 0x74
132 ONE_BYTE_OPCODE, // 0x75
133 ONE_BYTE_OPCODE, // 0x76
134 ONE_BYTE_OPCODE, // 0x77
135 ONE_BYTE_OPCODE, // 0x78
136 ONE_BYTE_OPCODE, // 0x79
137 ONE_BYTE_OPCODE, // 0x7a
138 ONE_BYTE_OPCODE, // 0x7b
139 ONE_BYTE_OPCODE, // 0x7c
140 ONE_BYTE_OPCODE, // 0x7d
141 ONE_BYTE_OPCODE, // 0x7e
142 ONE_BYTE_OPCODE, // 0x7f
143 ONE_BYTE_OPCODE, // 0x80
144 ONE_BYTE_OPCODE, // 0x81
145 ONE_BYTE_OPCODE, // 0x82
146 ONE_BYTE_OPCODE, // 0x83
147 ONE_BYTE_OPCODE, // 0x84
148 ONE_BYTE_OPCODE, // 0x85
149 ONE_BYTE_OPCODE, // 0x86
150 ONE_BYTE_OPCODE, // 0x87
151 ONE_BYTE_OPCODE, // 0x88
152 ONE_BYTE_OPCODE, // 0x89
153 ONE_BYTE_OPCODE, // 0x8a
154 ONE_BYTE_OPCODE, // 0x8b
155 ONE_BYTE_OPCODE, // 0x8c
156 ONE_BYTE_OPCODE, // 0x8d
157 ONE_BYTE_OPCODE, // 0x8e
158 ONE_BYTE_OPCODE, // 0x8f
159 ONE_BYTE_OPCODE, // 0x90
160 ONE_BYTE_OPCODE, // 0x91
161 ONE_BYTE_OPCODE, // 0x92
162 ONE_BYTE_OPCODE, // 0x93
163 ONE_BYTE_OPCODE, // 0x94
164 ONE_BYTE_OPCODE, // 0x95
165 ONE_BYTE_OPCODE, // 0x96
166 ONE_BYTE_OPCODE, // 0x97
167 ONE_BYTE_OPCODE, // 0x98
168 ONE_BYTE_OPCODE, // 0x99
169 ONE_BYTE_OPCODE, // 0x9a
170 ONE_BYTE_OPCODE, // 0x9b
171 TWO_BYTE_DISJOINT_OPCODE, // 0x9c
172 TWO_BYTE_DISJOINT_OPCODE, // 0x9d
173 TWO_BYTE_DISJOINT_OPCODE, // 0x9e
174 TWO_BYTE_DISJOINT_OPCODE, // 0x9f
175 TWO_BYTE_DISJOINT_OPCODE, // 0xa0
176 TWO_BYTE_DISJOINT_OPCODE, // 0xa1
177 TWO_BYTE_DISJOINT_OPCODE, // 0xa2
178 TWO_BYTE_DISJOINT_OPCODE, // 0xa3
179 TWO_BYTE_DISJOINT_OPCODE, // 0xa4
180 THREE_NIBBLE_OPCODE, // 0xa5
181 TWO_BYTE_DISJOINT_OPCODE, // 0xa6
182 THREE_NIBBLE_OPCODE, // 0xa7
183 ONE_BYTE_OPCODE, // 0xa8
184 ONE_BYTE_OPCODE, // 0xa9
185 ONE_BYTE_OPCODE, // 0xaa
186 ONE_BYTE_OPCODE, // 0xab
187 ONE_BYTE_OPCODE, // 0xac
188 ONE_BYTE_OPCODE, // 0xad
189 ONE_BYTE_OPCODE, // 0xae
190 ONE_BYTE_OPCODE, // 0xaf
191 ONE_BYTE_OPCODE, // 0xb0
192 ONE_BYTE_OPCODE, // 0xb1
193 TWO_BYTE_OPCODE, // 0xb2
194 TWO_BYTE_OPCODE, // 0xb3
195 TWO_BYTE_DISJOINT_OPCODE, // 0xb4
196 TWO_BYTE_DISJOINT_OPCODE, // 0xb5
197 TWO_BYTE_DISJOINT_OPCODE, // 0xb6
198 TWO_BYTE_DISJOINT_OPCODE, // 0xb7
199 TWO_BYTE_DISJOINT_OPCODE, // 0xb8
200 TWO_BYTE_OPCODE, // 0xb9
201 ONE_BYTE_OPCODE, // 0xba
202 ONE_BYTE_OPCODE, // 0xbb
203 ONE_BYTE_OPCODE, // 0xbc
204 ONE_BYTE_OPCODE, // 0xbd
205 ONE_BYTE_OPCODE, // 0xbe
206 ONE_BYTE_OPCODE, // 0xbf
207 THREE_NIBBLE_OPCODE, // 0xc0
208 THREE_NIBBLE_OPCODE, // 0xc1
209 THREE_NIBBLE_OPCODE, // 0xc2
210 THREE_NIBBLE_OPCODE, // 0xc3
211 THREE_NIBBLE_OPCODE, // 0xc4
212 THREE_NIBBLE_OPCODE, // 0xc5
213 THREE_NIBBLE_OPCODE, // 0xc6
214 ONE_BYTE_OPCODE, // 0xc7
215 THREE_NIBBLE_OPCODE, // 0xc8
216 THREE_NIBBLE_OPCODE, // 0xc9
217 THREE_NIBBLE_OPCODE, // 0xca
218 THREE_NIBBLE_OPCODE, // 0xcb
219 THREE_NIBBLE_OPCODE, // 0xcc
220 TWO_BYTE_DISJOINT_OPCODE, // 0xcd
221 TWO_BYTE_DISJOINT_OPCODE, // 0xce
222 TWO_BYTE_DISJOINT_OPCODE, // 0xcf
223 ONE_BYTE_OPCODE, // 0xd0
224 ONE_BYTE_OPCODE, // 0xd1
225 ONE_BYTE_OPCODE, // 0xd2
226 ONE_BYTE_OPCODE, // 0xd3
227 ONE_BYTE_OPCODE, // 0xd4
228 ONE_BYTE_OPCODE, // 0xd5
229 ONE_BYTE_OPCODE, // 0xd6
230 ONE_BYTE_OPCODE, // 0xd7
231 ONE_BYTE_OPCODE, // 0xd8
232 ONE_BYTE_OPCODE, // 0xd9
233 ONE_BYTE_OPCODE, // 0xda
234 ONE_BYTE_OPCODE, // 0xdb
235 ONE_BYTE_OPCODE, // 0xdc
236 ONE_BYTE_OPCODE, // 0xdd
237 ONE_BYTE_OPCODE, // 0xde
238 ONE_BYTE_OPCODE, // 0xdf
239 ONE_BYTE_OPCODE, // 0xe0
240 ONE_BYTE_OPCODE, // 0xe1
241 ONE_BYTE_OPCODE, // 0xe2
242 TWO_BYTE_DISJOINT_OPCODE, // 0xe3
243 TWO_BYTE_DISJOINT_OPCODE, // 0xe4
244 TWO_BYTE_OPCODE, // 0xe5
245 TWO_BYTE_DISJOINT_OPCODE, // 0xe6
246 TWO_BYTE_DISJOINT_OPCODE, // 0xe7
247 ONE_BYTE_OPCODE, // 0xe8
248 ONE_BYTE_OPCODE, // 0xe9
249 ONE_BYTE_OPCODE, // 0xea
250 TWO_BYTE_DISJOINT_OPCODE, // 0xeb
251 TWO_BYTE_DISJOINT_OPCODE, // 0xec
252 TWO_BYTE_DISJOINT_OPCODE, // 0xed
253 ONE_BYTE_OPCODE, // 0xee
254 ONE_BYTE_OPCODE, // 0xef
255 ONE_BYTE_OPCODE, // 0xf0
256 ONE_BYTE_OPCODE, // 0xf1
257 ONE_BYTE_OPCODE, // 0xf2
258 ONE_BYTE_OPCODE, // 0xf3
259 ONE_BYTE_OPCODE, // 0xf4
260 ONE_BYTE_OPCODE, // 0xf5
261 ONE_BYTE_OPCODE, // 0xf6
262 ONE_BYTE_OPCODE, // 0xf7
263 ONE_BYTE_OPCODE, // 0xf8
264 ONE_BYTE_OPCODE, // 0xf9
265 ONE_BYTE_OPCODE, // 0xfa
266 ONE_BYTE_OPCODE, // 0xfb
267 ONE_BYTE_OPCODE, // 0xfc
268 ONE_BYTE_OPCODE, // 0xfd
269 TWO_BYTE_DISJOINT_OPCODE, // 0xfe
270 TWO_BYTE_DISJOINT_OPCODE, // 0xff
271};
272
Ben Murdochda12d292016-06-02 14:46:10 +0100273// These register names are defined in a way to match the native disassembler
274// formatting. See for example the command "objdump -d <binary file>".
275const char* Registers::names_[kNumRegisters] = {
276 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
277 "r8", "r9", "r10", "fp", "ip", "r13", "r14", "sp"};
278
279const char* DoubleRegisters::names_[kNumDoubleRegisters] = {
280 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
281 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"};
282
283int DoubleRegisters::Number(const char* name) {
284 for (int i = 0; i < kNumDoubleRegisters; i++) {
285 if (strcmp(names_[i], name) == 0) {
286 return i;
287 }
288 }
289
290 // No register with the requested name found.
291 return kNoRegister;
292}
293
294int Registers::Number(const char* name) {
295 // Look through the canonical names.
296 for (int i = 0; i < kNumRegisters; i++) {
297 if (strcmp(names_[i], name) == 0) {
298 return i;
299 }
300 }
301
302 // No register with the requested name found.
303 return kNoRegister;
304}
305
306} // namespace internal
307} // namespace v8
308
309#endif // V8_TARGET_ARCH_S390