• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
9 namespace v8 {
10 namespace internal {
11 
12 Instruction::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>".
275 const char* Registers::names_[kNumRegisters] = {
276     "r0", "r1", "r2",  "r3", "r4", "r5",  "r6",  "r7",
277     "r8", "r9", "r10", "fp", "ip", "r13", "r14", "sp"};
278 
279 const char* DoubleRegisters::names_[kNumDoubleRegisters] = {
280     "f0", "f1", "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
281     "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"};
282 
Number(const char * name)283 int 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 
Number(const char * name)294 int 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