v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
instruction-scheduler-ppc.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 kPPC_And:
17 case kPPC_AndComplement:
18 case kPPC_Or:
19 case kPPC_OrComplement:
20 case kPPC_Xor:
21 case kPPC_ShiftLeft32:
22 case kPPC_ShiftLeft64:
23 case kPPC_ShiftLeftPair:
24 case kPPC_ShiftRight32:
25 case kPPC_ShiftRight64:
26 case kPPC_ShiftRightPair:
27 case kPPC_ShiftRightAlg32:
28 case kPPC_ShiftRightAlg64:
29 case kPPC_ShiftRightAlgPair:
30 case kPPC_RotRight32:
31 case kPPC_RotRight64:
32 case kPPC_Not:
33 case kPPC_RotLeftAndMask32:
34 case kPPC_RotLeftAndClear64:
35 case kPPC_RotLeftAndClearLeft64:
36 case kPPC_RotLeftAndClearRight64:
37 case kPPC_Add32:
38 case kPPC_Add64:
39 case kPPC_AddWithOverflow32:
40 case kPPC_AddPair:
41 case kPPC_AddDouble:
42 case kPPC_Sub:
43 case kPPC_SubWithOverflow32:
44 case kPPC_SubPair:
45 case kPPC_SubDouble:
46 case kPPC_Mul32:
47 case kPPC_Mul32WithHigh32:
48 case kPPC_Mul64:
49 case kPPC_MulHighS64:
50 case kPPC_MulHighU64:
51 case kPPC_MulHigh32:
52 case kPPC_MulHighU32:
53 case kPPC_MulPair:
54 case kPPC_MulDouble:
55 case kPPC_Div32:
56 case kPPC_Div64:
57 case kPPC_DivU32:
58 case kPPC_DivU64:
59 case kPPC_DivDouble:
60 case kPPC_Mod32:
61 case kPPC_Mod64:
62 case kPPC_ModU32:
63 case kPPC_ModU64:
64 case kPPC_ModDouble:
65 case kPPC_Neg:
66 case kPPC_NegDouble:
67 case kPPC_SqrtDouble:
68 case kPPC_FloorDouble:
69 case kPPC_CeilDouble:
70 case kPPC_TruncateDouble:
71 case kPPC_RoundDouble:
72 case kPPC_MaxDouble:
73 case kPPC_MinDouble:
74 case kPPC_AbsDouble:
75 case kPPC_Cntlz32:
76 case kPPC_Cntlz64:
77 case kPPC_Popcnt32:
78 case kPPC_Popcnt64:
79 case kPPC_Cmp32:
80 case kPPC_Cmp64:
81 case kPPC_CmpDouble:
82 case kPPC_Tst32:
83 case kPPC_Tst64:
84 case kPPC_ExtendSignWord8:
85 case kPPC_ExtendSignWord16:
86 case kPPC_ExtendSignWord32:
87 case kPPC_Uint32ToUint64:
88 case kPPC_Int64ToInt32:
89 case kPPC_Int64ToFloat32:
90 case kPPC_Int64ToDouble:
91 case kPPC_Uint64ToFloat32:
92 case kPPC_Uint64ToDouble:
93 case kPPC_Int32ToFloat32:
94 case kPPC_Int32ToDouble:
95 case kPPC_Uint32ToFloat32:
96 case kPPC_Uint32ToDouble:
97 case kPPC_Float32ToInt32:
98 case kPPC_Float32ToUint32:
99 case kPPC_Float32ToDouble:
100 case kPPC_Float64SilenceNaN:
101 case kPPC_DoubleToInt32:
102 case kPPC_DoubleToUint32:
103 case kPPC_DoubleToInt64:
104 case kPPC_DoubleToUint64:
105 case kPPC_DoubleToFloat32:
106 case kPPC_DoubleExtractLowWord32:
107 case kPPC_DoubleExtractHighWord32:
108 case kPPC_DoubleFromWord32Pair:
109 case kPPC_DoubleInsertLowWord32:
110 case kPPC_DoubleInsertHighWord32:
111 case kPPC_DoubleConstruct:
112 case kPPC_BitcastInt32ToFloat32:
113 case kPPC_BitcastFloat32ToInt32:
114 case kPPC_BitcastInt64ToDouble:
115 case kPPC_BitcastDoubleToInt64:
116 case kPPC_ByteRev32:
117 case kPPC_ByteRev64:
118 case kPPC_F64x2Add:
119 case kPPC_F64x2Sub:
120 case kPPC_F64x2Mul:
121 case kPPC_F64x2Eq:
122 case kPPC_F64x2Ne:
123 case kPPC_F64x2Le:
124 case kPPC_F64x2Lt:
125 case kPPC_F64x2Abs:
126 case kPPC_F64x2Neg:
127 case kPPC_F64x2Sqrt:
128 case kPPC_F64x2Qfma:
129 case kPPC_F64x2Qfms:
130 case kPPC_F64x2Div:
131 case kPPC_F64x2Min:
132 case kPPC_F64x2Max:
133 case kPPC_F64x2Ceil:
134 case kPPC_F64x2Floor:
135 case kPPC_F64x2Trunc:
136 case kPPC_F64x2Pmin:
137 case kPPC_F64x2Pmax:
138 case kPPC_F64x2ConvertLowI32x4S:
139 case kPPC_F64x2ConvertLowI32x4U:
140 case kPPC_F64x2PromoteLowF32x4:
141 case kPPC_F32x4Add:
142 case kPPC_F32x4Sub:
143 case kPPC_F32x4Mul:
144 case kPPC_F32x4Eq:
145 case kPPC_F32x4Ne:
146 case kPPC_F32x4Lt:
147 case kPPC_F32x4Le:
148 case kPPC_F32x4Abs:
149 case kPPC_F32x4Neg:
150 case kPPC_F32x4Sqrt:
151 case kPPC_F32x4SConvertI32x4:
152 case kPPC_F32x4UConvertI32x4:
153 case kPPC_F32x4Qfma:
154 case kPPC_F32x4Qfms:
155 case kPPC_F32x4Div:
156 case kPPC_F32x4Min:
157 case kPPC_F32x4Max:
158 case kPPC_F32x4Ceil:
159 case kPPC_F32x4Floor:
160 case kPPC_F32x4Trunc:
161 case kPPC_F32x4Pmin:
162 case kPPC_F32x4Pmax:
163 case kPPC_F32x4DemoteF64x2Zero:
164 case kPPC_I64x2Add:
165 case kPPC_I64x2Sub:
166 case kPPC_I64x2Mul:
167 case kPPC_I64x2Eq:
168 case kPPC_I64x2Ne:
169 case kPPC_I64x2GtS:
170 case kPPC_I64x2GeS:
171 case kPPC_I64x2Shl:
172 case kPPC_I64x2ShrS:
173 case kPPC_I64x2ShrU:
174 case kPPC_I64x2Neg:
175 case kPPC_I64x2BitMask:
176 case kPPC_I64x2SConvertI32x4Low:
177 case kPPC_I64x2SConvertI32x4High:
178 case kPPC_I64x2UConvertI32x4Low:
179 case kPPC_I64x2UConvertI32x4High:
180 case kPPC_I64x2ExtMulLowI32x4S:
181 case kPPC_I64x2ExtMulHighI32x4S:
182 case kPPC_I64x2ExtMulLowI32x4U:
183 case kPPC_I64x2ExtMulHighI32x4U:
184 case kPPC_I64x2Abs:
185 case kPPC_I32x4Add:
186 case kPPC_I32x4Sub:
187 case kPPC_I32x4Mul:
188 case kPPC_I32x4MinS:
189 case kPPC_I32x4MinU:
190 case kPPC_I32x4MaxS:
191 case kPPC_I32x4MaxU:
192 case kPPC_I32x4Eq:
193 case kPPC_I32x4Ne:
194 case kPPC_I32x4GtS:
195 case kPPC_I32x4GeS:
196 case kPPC_I32x4GtU:
197 case kPPC_I32x4GeU:
198 case kPPC_I32x4Shl:
199 case kPPC_I32x4ShrS:
200 case kPPC_I32x4ShrU:
201 case kPPC_I32x4Neg:
202 case kPPC_I32x4Abs:
203 case kPPC_I32x4SConvertF32x4:
204 case kPPC_I32x4UConvertF32x4:
205 case kPPC_I32x4SConvertI16x8Low:
206 case kPPC_I32x4SConvertI16x8High:
207 case kPPC_I32x4UConvertI16x8Low:
208 case kPPC_I32x4UConvertI16x8High:
209 case kPPC_I32x4BitMask:
210 case kPPC_I32x4DotI16x8S:
211 case kPPC_I32x4ExtAddPairwiseI16x8S:
212 case kPPC_I32x4ExtAddPairwiseI16x8U:
213 case kPPC_I32x4ExtMulLowI16x8S:
214 case kPPC_I32x4ExtMulHighI16x8S:
215 case kPPC_I32x4ExtMulLowI16x8U:
216 case kPPC_I32x4ExtMulHighI16x8U:
217 case kPPC_I32x4TruncSatF64x2SZero:
218 case kPPC_I32x4TruncSatF64x2UZero:
219 case kPPC_I32x4DotI8x16AddS:
220 case kPPC_I16x8Add:
221 case kPPC_I16x8Sub:
222 case kPPC_I16x8Mul:
223 case kPPC_I16x8MinS:
224 case kPPC_I16x8MinU:
225 case kPPC_I16x8MaxS:
226 case kPPC_I16x8MaxU:
227 case kPPC_I16x8Eq:
228 case kPPC_I16x8Ne:
229 case kPPC_I16x8GtS:
230 case kPPC_I16x8GeS:
231 case kPPC_I16x8GtU:
232 case kPPC_I16x8GeU:
233 case kPPC_I16x8Shl:
234 case kPPC_I16x8ShrS:
235 case kPPC_I16x8ShrU:
236 case kPPC_I16x8Neg:
237 case kPPC_I16x8Abs:
238 case kPPC_I16x8SConvertI32x4:
239 case kPPC_I16x8UConvertI32x4:
240 case kPPC_I16x8SConvertI8x16Low:
241 case kPPC_I16x8SConvertI8x16High:
242 case kPPC_I16x8UConvertI8x16Low:
243 case kPPC_I16x8UConvertI8x16High:
244 case kPPC_I16x8AddSatS:
245 case kPPC_I16x8SubSatS:
246 case kPPC_I16x8AddSatU:
247 case kPPC_I16x8SubSatU:
248 case kPPC_I16x8RoundingAverageU:
249 case kPPC_I16x8BitMask:
250 case kPPC_I16x8ExtAddPairwiseI8x16S:
251 case kPPC_I16x8ExtAddPairwiseI8x16U:
252 case kPPC_I16x8Q15MulRSatS:
253 case kPPC_I16x8ExtMulLowI8x16S:
254 case kPPC_I16x8ExtMulHighI8x16S:
255 case kPPC_I16x8ExtMulLowI8x16U:
256 case kPPC_I16x8ExtMulHighI8x16U:
257 case kPPC_I16x8DotI8x16S:
258 case kPPC_I8x16Add:
259 case kPPC_I8x16Sub:
260 case kPPC_I8x16MinS:
261 case kPPC_I8x16MinU:
262 case kPPC_I8x16MaxS:
263 case kPPC_I8x16MaxU:
264 case kPPC_I8x16Eq:
265 case kPPC_I8x16Ne:
266 case kPPC_I8x16GtS:
267 case kPPC_I8x16GeS:
268 case kPPC_I8x16GtU:
269 case kPPC_I8x16GeU:
270 case kPPC_I8x16Shl:
271 case kPPC_I8x16ShrS:
272 case kPPC_I8x16ShrU:
273 case kPPC_I8x16Neg:
274 case kPPC_I8x16Abs:
275 case kPPC_I8x16SConvertI16x8:
276 case kPPC_I8x16UConvertI16x8:
277 case kPPC_I8x16AddSatS:
278 case kPPC_I8x16SubSatS:
279 case kPPC_I8x16AddSatU:
280 case kPPC_I8x16SubSatU:
281 case kPPC_I8x16RoundingAverageU:
282 case kPPC_I8x16Shuffle:
283 case kPPC_I8x16Swizzle:
284 case kPPC_I8x16BitMask:
285 case kPPC_I8x16Popcnt:
286 case kPPC_I64x2AllTrue:
287 case kPPC_I32x4AllTrue:
288 case kPPC_I16x8AllTrue:
289 case kPPC_I8x16AllTrue:
290 case kPPC_V128AnyTrue:
291 case kPPC_S128And:
292 case kPPC_S128Or:
293 case kPPC_S128Xor:
294 case kPPC_S128Const:
295 case kPPC_S128Zero:
296 case kPPC_S128AllOnes:
297 case kPPC_S128Not:
298 case kPPC_S128Select:
299 case kPPC_S128AndNot:
300 case kPPC_FExtractLane:
301 case kPPC_IExtractLane:
302 case kPPC_IExtractLaneU:
303 case kPPC_IExtractLaneS:
304 case kPPC_FReplaceLane:
305 case kPPC_IReplaceLane:
306 case kPPC_FSplat:
307 case kPPC_ISplat:
308 case kPPC_LoadReverseSimd128RR:
309 return kNoOpcodeFlags;
310
311 case kPPC_LoadWordS8:
312 case kPPC_LoadWordU8:
313 case kPPC_LoadWordS16:
314 case kPPC_LoadWordU16:
315 case kPPC_LoadWordS32:
316 case kPPC_LoadWordU32:
317 case kPPC_LoadByteRev32:
318 case kPPC_LoadWord64:
319 case kPPC_LoadByteRev64:
320 case kPPC_LoadFloat32:
321 case kPPC_LoadDouble:
322 case kPPC_LoadSimd128:
323 case kPPC_Peek:
324 case kPPC_LoadDecompressTaggedSigned:
325 case kPPC_LoadDecompressTagged:
326 case kPPC_LoadDecodeSandboxedPointer:
327 case kPPC_S128Load8Splat:
328 case kPPC_S128Load16Splat:
329 case kPPC_S128Load32Splat:
330 case kPPC_S128Load64Splat:
331 case kPPC_S128Load8x8S:
332 case kPPC_S128Load8x8U:
333 case kPPC_S128Load16x4S:
334 case kPPC_S128Load16x4U:
335 case kPPC_S128Load32x2S:
336 case kPPC_S128Load32x2U:
337 case kPPC_S128Load32Zero:
338 case kPPC_S128Load64Zero:
339 case kPPC_S128Load8Lane:
340 case kPPC_S128Load16Lane:
341 case kPPC_S128Load32Lane:
342 case kPPC_S128Load64Lane:
343 return kIsLoadOperation;
344
345 case kPPC_StoreWord8:
346 case kPPC_StoreWord16:
347 case kPPC_StoreWord32:
348 case kPPC_StoreByteRev32:
349 case kPPC_StoreWord64:
350 case kPPC_StoreByteRev64:
351 case kPPC_StoreFloat32:
352 case kPPC_StoreDouble:
353 case kPPC_StoreSimd128:
354 case kPPC_StoreCompressTagged:
355 case kPPC_StoreIndirectPointer:
356 case kPPC_StoreEncodeSandboxedPointer:
357 case kPPC_Push:
358 case kPPC_PushFrame:
359 case kPPC_StoreToStackSlot:
360 case kPPC_Sync:
361 case kPPC_S128Store8Lane:
362 case kPPC_S128Store16Lane:
363 case kPPC_S128Store32Lane:
364 case kPPC_S128Store64Lane:
365 return kHasSideEffect;
366
367 case kPPC_AtomicExchangeUint8:
368 case kPPC_AtomicExchangeUint16:
369 case kPPC_AtomicExchangeWord32:
370 case kPPC_AtomicExchangeWord64:
371 case kPPC_AtomicCompareExchangeUint8:
372 case kPPC_AtomicCompareExchangeUint16:
373 case kPPC_AtomicCompareExchangeWord32:
374 case kPPC_AtomicCompareExchangeWord64:
375 case kPPC_AtomicAddUint8:
376 case kPPC_AtomicAddUint16:
377 case kPPC_AtomicAddUint32:
378 case kPPC_AtomicAddUint64:
379 case kPPC_AtomicAddInt8:
380 case kPPC_AtomicAddInt16:
381 case kPPC_AtomicAddInt32:
382 case kPPC_AtomicAddInt64:
383 case kPPC_AtomicSubUint8:
384 case kPPC_AtomicSubUint16:
385 case kPPC_AtomicSubUint32:
386 case kPPC_AtomicSubUint64:
387 case kPPC_AtomicSubInt8:
388 case kPPC_AtomicSubInt16:
389 case kPPC_AtomicSubInt32:
390 case kPPC_AtomicSubInt64:
391 case kPPC_AtomicAndUint8:
392 case kPPC_AtomicAndUint16:
393 case kPPC_AtomicAndUint32:
394 case kPPC_AtomicAndUint64:
395 case kPPC_AtomicAndInt8:
396 case kPPC_AtomicAndInt16:
397 case kPPC_AtomicAndInt32:
398 case kPPC_AtomicAndInt64:
399 case kPPC_AtomicOrUint8:
400 case kPPC_AtomicOrUint16:
401 case kPPC_AtomicOrUint32:
402 case kPPC_AtomicOrUint64:
403 case kPPC_AtomicOrInt8:
404 case kPPC_AtomicOrInt16:
405 case kPPC_AtomicOrInt32:
406 case kPPC_AtomicOrInt64:
407 case kPPC_AtomicXorUint8:
408 case kPPC_AtomicXorUint16:
409 case kPPC_AtomicXorUint32:
410 case kPPC_AtomicXorUint64:
411 case kPPC_AtomicXorInt8:
412 case kPPC_AtomicXorInt16:
413 case kPPC_AtomicXorInt32:
414 case kPPC_AtomicXorInt64:
415 return kHasSideEffect;
416
417#define CASE(Name) case k##Name:
419#undef CASE
420 // Already covered in architecture independent code.
421 UNREACHABLE();
422 }
423
424 UNREACHABLE();
425}
426
428 // TODO(all): Add instruction cost modeling.
429 return 1;
430}
431
432} // namespace compiler
433} // namespace internal
434} // namespace v8
int GetTargetInstructionFlags(const Instruction *instr) const
static int GetInstructionLatency(const Instruction *instr)
#define COMMON_ARCH_OPCODE_LIST(V)
Instruction * instr