v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
instruction-scheduler-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
6
7namespace v8 {
8namespace internal {
9namespace compiler {
10
11bool InstructionScheduler::SchedulerSupported() { return true; }
12
14 const Instruction* instr) const {
15 switch (instr->arch_opcode()) {
16 case kS390_Abs32:
17 case kS390_Abs64:
18 case kS390_And32:
19 case kS390_And64:
20 case kS390_Or32:
21 case kS390_Or64:
22 case kS390_Xor32:
23 case kS390_Xor64:
24 case kS390_ShiftLeft32:
25 case kS390_ShiftLeft64:
26 case kS390_ShiftRight32:
27 case kS390_ShiftRight64:
28 case kS390_ShiftRightArith32:
29 case kS390_ShiftRightArith64:
30 case kS390_RotRight32:
31 case kS390_RotRight64:
32 case kS390_Not32:
33 case kS390_Not64:
34 case kS390_RotLeftAndClear64:
35 case kS390_RotLeftAndClearLeft64:
36 case kS390_RotLeftAndClearRight64:
37 case kS390_Lay:
38 case kS390_Add32:
39 case kS390_Add64:
40 case kS390_AddFloat:
41 case kS390_AddDouble:
42 case kS390_Sub32:
43 case kS390_Sub64:
44 case kS390_SubFloat:
45 case kS390_SubDouble:
46 case kS390_Mul32:
47 case kS390_Mul32WithOverflow:
48 case kS390_Mul64:
49 case kS390_Mul64WithOverflow:
50 case kS390_MulHighS64:
51 case kS390_MulHighU64:
52 case kS390_MulHigh32:
53 case kS390_MulHighU32:
54 case kS390_MulFloat:
55 case kS390_MulDouble:
56 case kS390_Div32:
57 case kS390_Div64:
58 case kS390_DivU32:
59 case kS390_DivU64:
60 case kS390_DivFloat:
61 case kS390_DivDouble:
62 case kS390_Mod32:
63 case kS390_Mod64:
64 case kS390_ModU32:
65 case kS390_ModU64:
66 case kS390_ModDouble:
67 case kS390_Neg32:
68 case kS390_Neg64:
69 case kS390_NegDouble:
70 case kS390_NegFloat:
71 case kS390_SqrtFloat:
72 case kS390_FloorFloat:
73 case kS390_CeilFloat:
74 case kS390_TruncateFloat:
75 case kS390_FloatNearestInt:
76 case kS390_AbsFloat:
77 case kS390_SqrtDouble:
78 case kS390_FloorDouble:
79 case kS390_CeilDouble:
80 case kS390_TruncateDouble:
81 case kS390_RoundDouble:
82 case kS390_DoubleNearestInt:
83 case kS390_MaxFloat:
84 case kS390_MaxDouble:
85 case kS390_MinFloat:
86 case kS390_MinDouble:
87 case kS390_AbsDouble:
88 case kS390_Cntlz32:
89 case kS390_Cntlz64:
90 case kS390_Popcnt32:
91 case kS390_Popcnt64:
92 case kS390_Cmp32:
93 case kS390_Cmp64:
94 case kS390_CmpFloat:
95 case kS390_CmpDouble:
96 case kS390_Tst32:
97 case kS390_Tst64:
98 case kS390_SignExtendWord8ToInt32:
99 case kS390_SignExtendWord16ToInt32:
100 case kS390_SignExtendWord8ToInt64:
101 case kS390_SignExtendWord16ToInt64:
102 case kS390_SignExtendWord32ToInt64:
103 case kS390_Uint32ToUint64:
104 case kS390_Int64ToInt32:
105 case kS390_Int64ToFloat32:
106 case kS390_Int64ToDouble:
107 case kS390_Uint64ToFloat32:
108 case kS390_Uint64ToDouble:
109 case kS390_Int32ToFloat32:
110 case kS390_Int32ToDouble:
111 case kS390_Uint32ToFloat32:
112 case kS390_Uint32ToDouble:
113 case kS390_Float32ToInt32:
114 case kS390_Float32ToUint32:
115 case kS390_Float32ToUint64:
116 case kS390_Float32ToDouble:
117 case kS390_Float64SilenceNaN:
118 case kS390_DoubleToInt32:
119 case kS390_DoubleToUint32:
120 case kS390_Float32ToInt64:
121 case kS390_DoubleToInt64:
122 case kS390_DoubleToUint64:
123 case kS390_DoubleToFloat32:
124 case kS390_DoubleExtractLowWord32:
125 case kS390_DoubleExtractHighWord32:
126 case kS390_DoubleFromWord32Pair:
127 case kS390_DoubleInsertLowWord32:
128 case kS390_DoubleInsertHighWord32:
129 case kS390_DoubleConstruct:
130 case kS390_BitcastInt32ToFloat32:
131 case kS390_BitcastFloat32ToInt32:
132 case kS390_BitcastInt64ToDouble:
133 case kS390_BitcastDoubleToInt64:
134 case kS390_LoadReverse16RR:
135 case kS390_LoadReverse32RR:
136 case kS390_LoadReverse64RR:
137 case kS390_LoadReverseSimd128RR:
138 case kS390_LoadAndTestWord32:
139 case kS390_LoadAndTestWord64:
140 case kS390_LoadAndTestFloat32:
141 case kS390_LoadAndTestFloat64:
142 case kS390_F64x2Splat:
143 case kS390_F64x2ReplaceLane:
144 case kS390_F64x2Abs:
145 case kS390_F64x2Neg:
146 case kS390_F64x2Sqrt:
147 case kS390_F64x2Add:
148 case kS390_F64x2Sub:
149 case kS390_F64x2Mul:
150 case kS390_F64x2Div:
151 case kS390_F64x2Eq:
152 case kS390_F64x2Ne:
153 case kS390_F64x2Lt:
154 case kS390_F64x2Le:
155 case kS390_F64x2Min:
156 case kS390_F64x2Max:
157 case kS390_F64x2ExtractLane:
158 case kS390_F64x2Qfma:
159 case kS390_F64x2Qfms:
160 case kS390_F64x2Pmin:
161 case kS390_F64x2Pmax:
162 case kS390_F64x2Ceil:
163 case kS390_F64x2Floor:
164 case kS390_F64x2Trunc:
165 case kS390_F64x2NearestInt:
166 case kS390_F64x2ConvertLowI32x4S:
167 case kS390_F64x2ConvertLowI32x4U:
168 case kS390_F64x2PromoteLowF32x4:
169 case kS390_F32x4Splat:
170 case kS390_F32x4ExtractLane:
171 case kS390_F32x4ReplaceLane:
172 case kS390_F32x4Add:
173 case kS390_F32x4Sub:
174 case kS390_F32x4Mul:
175 case kS390_F32x4Eq:
176 case kS390_F32x4Ne:
177 case kS390_F32x4Lt:
178 case kS390_F32x4Le:
179 case kS390_F32x4Abs:
180 case kS390_F32x4Neg:
181 case kS390_F32x4SConvertI32x4:
182 case kS390_F32x4UConvertI32x4:
183 case kS390_F32x4Sqrt:
184 case kS390_F32x4Div:
185 case kS390_F32x4Min:
186 case kS390_F32x4Max:
187 case kS390_F32x4Qfma:
188 case kS390_F32x4Qfms:
189 case kS390_F32x4Pmin:
190 case kS390_F32x4Pmax:
191 case kS390_F32x4Ceil:
192 case kS390_F32x4Floor:
193 case kS390_F32x4Trunc:
194 case kS390_F32x4NearestInt:
195 case kS390_F32x4DemoteF64x2Zero:
196 case kS390_I64x2Neg:
197 case kS390_I64x2Add:
198 case kS390_I64x2Sub:
199 case kS390_I64x2Shl:
200 case kS390_I64x2ShrS:
201 case kS390_I64x2ShrU:
202 case kS390_I64x2Mul:
203 case kS390_I64x2Splat:
204 case kS390_I64x2ReplaceLane:
205 case kS390_I64x2ExtractLane:
206 case kS390_I64x2Eq:
207 case kS390_I64x2BitMask:
208 case kS390_I64x2ExtMulLowI32x4S:
209 case kS390_I64x2ExtMulHighI32x4S:
210 case kS390_I64x2ExtMulLowI32x4U:
211 case kS390_I64x2ExtMulHighI32x4U:
212 case kS390_I64x2SConvertI32x4Low:
213 case kS390_I64x2SConvertI32x4High:
214 case kS390_I64x2UConvertI32x4Low:
215 case kS390_I64x2UConvertI32x4High:
216 case kS390_I64x2Ne:
217 case kS390_I64x2GtS:
218 case kS390_I64x2GeS:
219 case kS390_I64x2Abs:
220 case kS390_I32x4Splat:
221 case kS390_I32x4ExtractLane:
222 case kS390_I32x4ReplaceLane:
223 case kS390_I32x4Add:
224 case kS390_I32x4Sub:
225 case kS390_I32x4Mul:
226 case kS390_I32x4MinS:
227 case kS390_I32x4MinU:
228 case kS390_I32x4MaxS:
229 case kS390_I32x4MaxU:
230 case kS390_I32x4Eq:
231 case kS390_I32x4Ne:
232 case kS390_I32x4GtS:
233 case kS390_I32x4GeS:
234 case kS390_I32x4GtU:
235 case kS390_I32x4GeU:
236 case kS390_I32x4Shl:
237 case kS390_I32x4ShrS:
238 case kS390_I32x4ShrU:
239 case kS390_I32x4Neg:
240 case kS390_I32x4SConvertF32x4:
241 case kS390_I32x4UConvertF32x4:
242 case kS390_I32x4SConvertI16x8Low:
243 case kS390_I32x4SConvertI16x8High:
244 case kS390_I32x4UConvertI16x8Low:
245 case kS390_I32x4UConvertI16x8High:
246 case kS390_I32x4Abs:
247 case kS390_I32x4BitMask:
248 case kS390_I32x4DotI16x8S:
249 case kS390_I32x4ExtMulLowI16x8S:
250 case kS390_I32x4ExtMulHighI16x8S:
251 case kS390_I32x4ExtMulLowI16x8U:
252 case kS390_I32x4ExtMulHighI16x8U:
253 case kS390_I32x4ExtAddPairwiseI16x8S:
254 case kS390_I32x4ExtAddPairwiseI16x8U:
255 case kS390_I32x4TruncSatF64x2SZero:
256 case kS390_I32x4TruncSatF64x2UZero:
257 case kS390_I32x4DotI8x16AddS:
258 case kS390_I16x8Splat:
259 case kS390_I16x8ExtractLaneU:
260 case kS390_I16x8ExtractLaneS:
261 case kS390_I16x8ReplaceLane:
262 case kS390_I16x8Add:
263 case kS390_I16x8Sub:
264 case kS390_I16x8Mul:
265 case kS390_I16x8MinS:
266 case kS390_I16x8MinU:
267 case kS390_I16x8MaxS:
268 case kS390_I16x8MaxU:
269 case kS390_I16x8Eq:
270 case kS390_I16x8Ne:
271 case kS390_I16x8GtS:
272 case kS390_I16x8GeS:
273 case kS390_I16x8GtU:
274 case kS390_I16x8GeU:
275 case kS390_I16x8Shl:
276 case kS390_I16x8ShrS:
277 case kS390_I16x8ShrU:
278 case kS390_I16x8Neg:
279 case kS390_I16x8SConvertI32x4:
280 case kS390_I16x8UConvertI32x4:
281 case kS390_I16x8SConvertI8x16Low:
282 case kS390_I16x8SConvertI8x16High:
283 case kS390_I16x8UConvertI8x16Low:
284 case kS390_I16x8UConvertI8x16High:
285 case kS390_I16x8AddSatS:
286 case kS390_I16x8SubSatS:
287 case kS390_I16x8AddSatU:
288 case kS390_I16x8SubSatU:
289 case kS390_I16x8RoundingAverageU:
290 case kS390_I16x8Abs:
291 case kS390_I16x8BitMask:
292 case kS390_I16x8ExtMulLowI8x16S:
293 case kS390_I16x8ExtMulHighI8x16S:
294 case kS390_I16x8ExtMulLowI8x16U:
295 case kS390_I16x8ExtMulHighI8x16U:
296 case kS390_I16x8ExtAddPairwiseI8x16S:
297 case kS390_I16x8ExtAddPairwiseI8x16U:
298 case kS390_I16x8Q15MulRSatS:
299 case kS390_I16x8DotI8x16S:
300 case kS390_I8x16Splat:
301 case kS390_I8x16ExtractLaneU:
302 case kS390_I8x16ExtractLaneS:
303 case kS390_I8x16ReplaceLane:
304 case kS390_I8x16Add:
305 case kS390_I8x16Sub:
306 case kS390_I8x16MinS:
307 case kS390_I8x16MinU:
308 case kS390_I8x16MaxS:
309 case kS390_I8x16MaxU:
310 case kS390_I8x16Eq:
311 case kS390_I8x16Ne:
312 case kS390_I8x16GtS:
313 case kS390_I8x16GeS:
314 case kS390_I8x16GtU:
315 case kS390_I8x16GeU:
316 case kS390_I8x16Shl:
317 case kS390_I8x16ShrS:
318 case kS390_I8x16ShrU:
319 case kS390_I8x16Neg:
320 case kS390_I8x16SConvertI16x8:
321 case kS390_I8x16UConvertI16x8:
322 case kS390_I8x16AddSatS:
323 case kS390_I8x16SubSatS:
324 case kS390_I8x16AddSatU:
325 case kS390_I8x16SubSatU:
326 case kS390_I8x16RoundingAverageU:
327 case kS390_I8x16Abs:
328 case kS390_I8x16BitMask:
329 case kS390_I8x16Shuffle:
330 case kS390_I8x16Swizzle:
331 case kS390_I8x16Popcnt:
332 case kS390_I64x2AllTrue:
333 case kS390_I32x4AllTrue:
334 case kS390_I16x8AllTrue:
335 case kS390_I8x16AllTrue:
336 case kS390_V128AnyTrue:
337 case kS390_S128And:
338 case kS390_S128Or:
339 case kS390_S128Xor:
340 case kS390_S128Const:
341 case kS390_S128Zero:
342 case kS390_S128AllOnes:
343 case kS390_S128Not:
344 case kS390_S128Select:
345 case kS390_S128AndNot:
346 return kNoOpcodeFlags;
347
348 case kS390_LoadWordS8:
349 case kS390_LoadWordU8:
350 case kS390_LoadWordS16:
351 case kS390_LoadWordU16:
352 case kS390_LoadWordS32:
353 case kS390_LoadWordU32:
354 case kS390_LoadWord64:
355 case kS390_LoadFloat32:
356 case kS390_LoadDouble:
357 case kS390_LoadSimd128:
358 case kS390_LoadReverse16:
359 case kS390_LoadReverse32:
360 case kS390_LoadReverse64:
361 case kS390_LoadReverseSimd128:
362 case kS390_Peek:
363 case kS390_LoadDecompressTaggedSigned:
364 case kS390_LoadDecompressTagged:
365 case kS390_S128Load8Splat:
366 case kS390_S128Load16Splat:
367 case kS390_S128Load32Splat:
368 case kS390_S128Load64Splat:
369 case kS390_S128Load8x8S:
370 case kS390_S128Load8x8U:
371 case kS390_S128Load16x4S:
372 case kS390_S128Load16x4U:
373 case kS390_S128Load32x2S:
374 case kS390_S128Load32x2U:
375 case kS390_S128Load32Zero:
376 case kS390_S128Load64Zero:
377 case kS390_S128Load8Lane:
378 case kS390_S128Load16Lane:
379 case kS390_S128Load32Lane:
380 case kS390_S128Load64Lane:
381 return kIsLoadOperation;
382
383 case kS390_StoreWord8:
384 case kS390_StoreWord16:
385 case kS390_StoreWord32:
386 case kS390_StoreWord64:
387 case kS390_StoreReverseSimd128:
388 case kS390_StoreReverse16:
389 case kS390_StoreReverse32:
390 case kS390_StoreReverse64:
391 case kS390_StoreFloat32:
392 case kS390_StoreDouble:
393 case kS390_StoreSimd128:
394 case kS390_StoreCompressTagged:
395 case kS390_Push:
396 case kS390_PushFrame:
397 case kS390_StoreToStackSlot:
398 case kS390_S128Store8Lane:
399 case kS390_S128Store16Lane:
400 case kS390_S128Store32Lane:
401 case kS390_S128Store64Lane:
402 return kHasSideEffect;
403
404 case kS390_Word64AtomicExchangeUint64:
405 case kS390_Word64AtomicCompareExchangeUint64:
406 case kS390_Word64AtomicAddUint64:
407 case kS390_Word64AtomicSubUint64:
408 case kS390_Word64AtomicAndUint64:
409 case kS390_Word64AtomicOrUint64:
410 case kS390_Word64AtomicXorUint64:
411 return kHasSideEffect;
412
413#define CASE(Name) case k##Name:
415#undef CASE
416 // Already covered in architecture independent code.
417 UNREACHABLE();
418 }
419
420 UNREACHABLE();
421}
422
424 // TODO(all): Add instruction cost modeling.
425 return 1;
426}
427
428} // namespace compiler
429} // namespace internal
430} // namespace v8
int GetTargetInstructionFlags(const Instruction *instr) const
static int GetInstructionLatency(const Instruction *instr)
#define COMMON_ARCH_OPCODE_LIST(V)
Instruction * instr