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_S390
6
7#include "src/s390/constants-s390.h"
8
9namespace v8 {
10namespace internal {
11
12Instruction::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
273// 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
310