• 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/codegen/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