V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
instruction-scheduler-arm.cc
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 #include "src/compiler/backend/instruction-scheduler.h"
6 
7 namespace v8 {
8 namespace internal {
9 namespace compiler {
10 
11 bool InstructionScheduler::SchedulerSupported() { return true; }
12 
13 int InstructionScheduler::GetTargetInstructionFlags(
14  const Instruction* instr) const {
15  switch (instr->arch_opcode()) {
16  case kArmAdd:
17  case kArmAnd:
18  case kArmBic:
19  case kArmClz:
20  case kArmCmp:
21  case kArmCmn:
22  case kArmTst:
23  case kArmTeq:
24  case kArmOrr:
25  case kArmEor:
26  case kArmSub:
27  case kArmRsb:
28  case kArmMul:
29  case kArmMla:
30  case kArmMls:
31  case kArmSmmul:
32  case kArmSmull:
33  case kArmSmmla:
34  case kArmUmull:
35  case kArmSdiv:
36  case kArmUdiv:
37  case kArmMov:
38  case kArmMvn:
39  case kArmBfc:
40  case kArmUbfx:
41  case kArmSbfx:
42  case kArmSxtb:
43  case kArmSxth:
44  case kArmSxtab:
45  case kArmSxtah:
46  case kArmUxtb:
47  case kArmUxth:
48  case kArmUxtab:
49  case kArmUxtah:
50  case kArmRbit:
51  case kArmRev:
52  case kArmAddPair:
53  case kArmSubPair:
54  case kArmMulPair:
55  case kArmLslPair:
56  case kArmLsrPair:
57  case kArmAsrPair:
58  case kArmVcmpF32:
59  case kArmVaddF32:
60  case kArmVsubF32:
61  case kArmVmulF32:
62  case kArmVmlaF32:
63  case kArmVmlsF32:
64  case kArmVdivF32:
65  case kArmVabsF32:
66  case kArmVnegF32:
67  case kArmVsqrtF32:
68  case kArmVcmpF64:
69  case kArmVaddF64:
70  case kArmVsubF64:
71  case kArmVmulF64:
72  case kArmVmlaF64:
73  case kArmVmlsF64:
74  case kArmVdivF64:
75  case kArmVmodF64:
76  case kArmVabsF64:
77  case kArmVnegF64:
78  case kArmVsqrtF64:
79  case kArmVrintmF32:
80  case kArmVrintmF64:
81  case kArmVrintpF32:
82  case kArmVrintpF64:
83  case kArmVrintzF32:
84  case kArmVrintzF64:
85  case kArmVrintaF64:
86  case kArmVrintnF32:
87  case kArmVrintnF64:
88  case kArmVcvtF32F64:
89  case kArmVcvtF64F32:
90  case kArmVcvtF32S32:
91  case kArmVcvtF32U32:
92  case kArmVcvtF64S32:
93  case kArmVcvtF64U32:
94  case kArmVcvtS32F32:
95  case kArmVcvtU32F32:
96  case kArmVcvtS32F64:
97  case kArmVcvtU32F64:
98  case kArmVmovU32F32:
99  case kArmVmovF32U32:
100  case kArmVmovLowU32F64:
101  case kArmVmovLowF64U32:
102  case kArmVmovHighU32F64:
103  case kArmVmovHighF64U32:
104  case kArmVmovF64U32U32:
105  case kArmVmovU32U32F64:
106  case kArmFloat32Max:
107  case kArmFloat64Max:
108  case kArmFloat32Min:
109  case kArmFloat64Min:
110  case kArmFloat64SilenceNaN:
111  case kArmF32x4Splat:
112  case kArmF32x4ExtractLane:
113  case kArmF32x4ReplaceLane:
114  case kArmF32x4SConvertI32x4:
115  case kArmF32x4UConvertI32x4:
116  case kArmF32x4Abs:
117  case kArmF32x4Neg:
118  case kArmF32x4RecipApprox:
119  case kArmF32x4RecipSqrtApprox:
120  case kArmF32x4Add:
121  case kArmF32x4AddHoriz:
122  case kArmF32x4Sub:
123  case kArmF32x4Mul:
124  case kArmF32x4Min:
125  case kArmF32x4Max:
126  case kArmF32x4Eq:
127  case kArmF32x4Ne:
128  case kArmF32x4Lt:
129  case kArmF32x4Le:
130  case kArmI32x4Splat:
131  case kArmI32x4ExtractLane:
132  case kArmI32x4ReplaceLane:
133  case kArmI32x4SConvertF32x4:
134  case kArmI32x4SConvertI16x8Low:
135  case kArmI32x4SConvertI16x8High:
136  case kArmI32x4Neg:
137  case kArmI32x4Shl:
138  case kArmI32x4ShrS:
139  case kArmI32x4Add:
140  case kArmI32x4AddHoriz:
141  case kArmI32x4Sub:
142  case kArmI32x4Mul:
143  case kArmI32x4MinS:
144  case kArmI32x4MaxS:
145  case kArmI32x4Eq:
146  case kArmI32x4Ne:
147  case kArmI32x4GtS:
148  case kArmI32x4GeS:
149  case kArmI32x4UConvertF32x4:
150  case kArmI32x4UConvertI16x8Low:
151  case kArmI32x4UConvertI16x8High:
152  case kArmI32x4ShrU:
153  case kArmI32x4MinU:
154  case kArmI32x4MaxU:
155  case kArmI32x4GtU:
156  case kArmI32x4GeU:
157  case kArmI16x8Splat:
158  case kArmI16x8ExtractLane:
159  case kArmI16x8ReplaceLane:
160  case kArmI16x8SConvertI8x16Low:
161  case kArmI16x8SConvertI8x16High:
162  case kArmI16x8Neg:
163  case kArmI16x8Shl:
164  case kArmI16x8ShrS:
165  case kArmI16x8SConvertI32x4:
166  case kArmI16x8Add:
167  case kArmI16x8AddSaturateS:
168  case kArmI16x8AddHoriz:
169  case kArmI16x8Sub:
170  case kArmI16x8SubSaturateS:
171  case kArmI16x8Mul:
172  case kArmI16x8MinS:
173  case kArmI16x8MaxS:
174  case kArmI16x8Eq:
175  case kArmI16x8Ne:
176  case kArmI16x8GtS:
177  case kArmI16x8GeS:
178  case kArmI16x8UConvertI8x16Low:
179  case kArmI16x8UConvertI8x16High:
180  case kArmI16x8ShrU:
181  case kArmI16x8UConvertI32x4:
182  case kArmI16x8AddSaturateU:
183  case kArmI16x8SubSaturateU:
184  case kArmI16x8MinU:
185  case kArmI16x8MaxU:
186  case kArmI16x8GtU:
187  case kArmI16x8GeU:
188  case kArmI8x16Splat:
189  case kArmI8x16ExtractLane:
190  case kArmI8x16ReplaceLane:
191  case kArmI8x16Neg:
192  case kArmI8x16Shl:
193  case kArmI8x16ShrS:
194  case kArmI8x16SConvertI16x8:
195  case kArmI8x16Add:
196  case kArmI8x16AddSaturateS:
197  case kArmI8x16Sub:
198  case kArmI8x16SubSaturateS:
199  case kArmI8x16Mul:
200  case kArmI8x16MinS:
201  case kArmI8x16MaxS:
202  case kArmI8x16Eq:
203  case kArmI8x16Ne:
204  case kArmI8x16GtS:
205  case kArmI8x16GeS:
206  case kArmI8x16UConvertI16x8:
207  case kArmI8x16AddSaturateU:
208  case kArmI8x16SubSaturateU:
209  case kArmI8x16ShrU:
210  case kArmI8x16MinU:
211  case kArmI8x16MaxU:
212  case kArmI8x16GtU:
213  case kArmI8x16GeU:
214  case kArmS128Zero:
215  case kArmS128Dup:
216  case kArmS128And:
217  case kArmS128Or:
218  case kArmS128Xor:
219  case kArmS128Not:
220  case kArmS128Select:
221  case kArmS32x4ZipLeft:
222  case kArmS32x4ZipRight:
223  case kArmS32x4UnzipLeft:
224  case kArmS32x4UnzipRight:
225  case kArmS32x4TransposeLeft:
226  case kArmS32x4TransposeRight:
227  case kArmS32x4Shuffle:
228  case kArmS16x8ZipLeft:
229  case kArmS16x8ZipRight:
230  case kArmS16x8UnzipLeft:
231  case kArmS16x8UnzipRight:
232  case kArmS16x8TransposeLeft:
233  case kArmS16x8TransposeRight:
234  case kArmS8x16ZipLeft:
235  case kArmS8x16ZipRight:
236  case kArmS8x16UnzipLeft:
237  case kArmS8x16UnzipRight:
238  case kArmS8x16TransposeLeft:
239  case kArmS8x16TransposeRight:
240  case kArmS8x16Concat:
241  case kArmS8x16Shuffle:
242  case kArmS32x2Reverse:
243  case kArmS16x4Reverse:
244  case kArmS16x2Reverse:
245  case kArmS8x8Reverse:
246  case kArmS8x4Reverse:
247  case kArmS8x2Reverse:
248  case kArmS1x4AnyTrue:
249  case kArmS1x4AllTrue:
250  case kArmS1x8AnyTrue:
251  case kArmS1x8AllTrue:
252  case kArmS1x16AnyTrue:
253  case kArmS1x16AllTrue:
254  return kNoOpcodeFlags;
255 
256  case kArmVldrF32:
257  case kArmVldrF64:
258  case kArmVld1F64:
259  case kArmVld1S128:
260  case kArmLdrb:
261  case kArmLdrsb:
262  case kArmLdrh:
263  case kArmLdrsh:
264  case kArmLdr:
265  case kArmPeek:
266  case kArmWord32AtomicPairLoad:
267  return kIsLoadOperation;
268 
269  case kArmVstrF32:
270  case kArmVstrF64:
271  case kArmVst1F64:
272  case kArmVst1S128:
273  case kArmStrb:
274  case kArmStrh:
275  case kArmStr:
276  case kArmPush:
277  case kArmPoke:
278  case kArmDsbIsb:
279  case kArmWord32AtomicPairStore:
280  case kArmWord32AtomicPairAdd:
281  case kArmWord32AtomicPairSub:
282  case kArmWord32AtomicPairAnd:
283  case kArmWord32AtomicPairOr:
284  case kArmWord32AtomicPairXor:
285  case kArmWord32AtomicPairExchange:
286  case kArmWord32AtomicPairCompareExchange:
287  return kHasSideEffect;
288 
289 #define CASE(Name) case k##Name:
290  COMMON_ARCH_OPCODE_LIST(CASE)
291 #undef CASE
292  // Already covered in architecture independent code.
293  UNREACHABLE();
294  }
295 
296  UNREACHABLE();
297 }
298 
299 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
300  // TODO(all): Add instruction cost modeling.
301  return 1;
302 }
303 
304 } // namespace compiler
305 } // namespace internal
306 } // namespace v8
Definition: libplatform.h:13