OLD | NEW |
---|---|
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/instruction-scheduler.h" | 5 #include "src/compiler/instruction-scheduler.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace compiler { | 9 namespace compiler { |
10 | 10 |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
169 | 169 |
170 UNREACHABLE(); | 170 UNREACHABLE(); |
171 return kNoOpcodeFlags; | 171 return kNoOpcodeFlags; |
172 } | 172 } |
173 | 173 |
174 | 174 |
175 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) { | 175 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) { |
176 // Basic latency modeling for arm64 instructions. They have been determined | 176 // Basic latency modeling for arm64 instructions. They have been determined |
177 // in an empirical way. | 177 // in an empirical way. |
178 switch (instr->arch_opcode()) { | 178 switch (instr->arch_opcode()) { |
179 case kArm64Float32ToFloat64: | 179 case kArm64Add: |
180 case kArm64Float64ToFloat32: | 180 case kArm64Add32: |
181 case kArm64Float64ToInt32: | 181 case kArm64And: |
182 case kArm64Float64ToUint32: | 182 case kArm64And32: |
183 case kArm64Int32ToFloat64: | 183 case kArm64Bic: |
184 case kArm64Uint32ToFloat64: | 184 case kArm64Bic32: |
185 return 3; | 185 case kArm64Cmn: |
186 case kArm64Cmn32: | |
187 case kArm64Cmp: | |
188 case kArm64Cmp32: | |
189 case kArm64Eon: | |
190 case kArm64Eon32: | |
191 case kArm64Eor: | |
192 case kArm64Eor32: | |
193 case kArm64Not: | |
194 case kArm64Not32: | |
195 case kArm64Or: | |
196 case kArm64Or32: | |
197 case kArm64Orn: | |
198 case kArm64Orn32: | |
199 case kArm64Sub: | |
200 case kArm64Sub32: | |
201 case kArm64Tst: | |
202 case kArm64Tst32: | |
203 if (instr->addressing_mode() != kMode_None) { | |
204 return 3; | |
205 } | |
206 // fallthrough | |
Jarin
2016/04/24 09:32:10
I am not a big fan of non-trivial fallthroughs. Wo
| |
186 | 207 |
187 case kArm64Float64Add: | 208 case kArm64Clz: |
188 case kArm64Float64Sub: | 209 case kArm64Clz32: |
189 return 2; | 210 case kArm64Sbfx32: |
190 | 211 case kArm64Sxtb32: |
191 case kArm64Float64Mul: | 212 case kArm64Sxth32: |
192 return 3; | 213 case kArm64Sxtw: |
193 | 214 case kArm64Ubfiz32: |
194 case kArm64Float64Div: | 215 case kArm64Ubfx: |
195 return 6; | 216 case kArm64Ubfx32: |
217 return 1; | |
196 | 218 |
197 case kArm64Lsl: | 219 case kArm64Lsl: |
198 case kArm64Lsl32: | 220 case kArm64Lsl32: |
199 case kArm64Lsr: | 221 case kArm64Lsr: |
200 case kArm64Lsr32: | 222 case kArm64Lsr32: |
201 case kArm64Asr: | 223 case kArm64Asr: |
202 case kArm64Asr32: | 224 case kArm64Asr32: |
203 case kArm64Ror: | 225 case kArm64Ror: |
204 case kArm64Ror32: | 226 case kArm64Ror32: |
205 return 3; | 227 return 1; |
228 | |
229 case kArm64Ldr: | |
230 case kArm64LdrD: | |
231 case kArm64LdrS: | |
232 case kArm64LdrW: | |
233 case kArm64Ldrb: | |
234 case kArm64Ldrh: | |
235 case kArm64Ldrsb: | |
236 case kArm64Ldrsh: | |
237 return 11; | |
206 | 238 |
207 case kCheckedLoadInt8: | 239 case kCheckedLoadInt8: |
208 case kCheckedLoadUint8: | 240 case kCheckedLoadUint8: |
209 case kCheckedLoadInt16: | 241 case kCheckedLoadInt16: |
210 case kCheckedLoadUint16: | 242 case kCheckedLoadUint16: |
211 case kCheckedLoadWord32: | 243 case kCheckedLoadWord32: |
212 case kCheckedLoadWord64: | 244 case kCheckedLoadWord64: |
213 case kCheckedLoadFloat32: | 245 case kCheckedLoadFloat32: |
214 case kCheckedLoadFloat64: | 246 case kCheckedLoadFloat64: |
215 case kArm64LdrS: | 247 return 5; |
216 case kArm64LdrD: | 248 |
217 case kArm64Ldrb: | 249 case kArm64Str: |
218 case kArm64Ldrsb: | 250 case kArm64StrD: |
219 case kArm64Ldrh: | 251 case kArm64StrS: |
220 case kArm64Ldrsh: | 252 case kArm64StrW: |
221 case kArm64LdrW: | 253 case kArm64Strb: |
222 case kArm64Ldr: | 254 case kArm64Strh: |
255 return 1; | |
256 | |
257 case kCheckedStoreWord8: | |
258 case kCheckedStoreWord16: | |
259 case kCheckedStoreWord32: | |
260 case kCheckedStoreWord64: | |
261 case kCheckedStoreFloat32: | |
262 case kCheckedStoreFloat64: | |
263 return 1; | |
264 | |
265 case kArm64Madd32: | |
266 case kArm64Mneg32: | |
267 case kArm64Msub32: | |
268 case kArm64Mul32: | |
269 return 3; | |
270 | |
271 case kArm64Madd: | |
272 case kArm64Mneg: | |
273 case kArm64Msub: | |
274 case kArm64Mul: | |
275 return 5; | |
276 | |
277 case kArm64Idiv32: | |
278 case kArm64Udiv32: | |
279 return 12; | |
280 | |
281 case kArm64Idiv: | |
282 case kArm64Udiv: | |
283 return 20; | |
284 | |
285 case kArm64Float32Add: | |
286 case kArm64Float32Sub: | |
287 case kArm64Float64Add: | |
288 case kArm64Float64Sub: | |
289 return 5; | |
290 | |
291 case kArm64Float32Abs: | |
292 case kArm64Float32Cmp: | |
293 case kArm64Float64Abs: | |
294 case kArm64Float64Cmp: | |
295 case kArm64Float64Neg: | |
296 return 3; | |
297 | |
298 case kArm64Float32Div: | |
299 case kArm64Float32Sqrt: | |
300 return 12; | |
301 | |
302 case kArm64Float64Div: | |
303 case kArm64Float64Sqrt: | |
304 return 19; | |
305 | |
306 case kArm64Float32RoundDown: | |
307 case kArm64Float32RoundTiesEven: | |
308 case kArm64Float32RoundTruncate: | |
309 case kArm64Float32RoundUp: | |
310 case kArm64Float64RoundDown: | |
311 case kArm64Float64RoundTiesAway: | |
312 case kArm64Float64RoundTiesEven: | |
313 case kArm64Float64RoundTruncate: | |
314 case kArm64Float64RoundUp: | |
315 return 5; | |
316 | |
317 case kArm64Float32ToFloat64: | |
318 case kArm64Float64ToFloat32: | |
319 case kArm64Float64ToInt32: | |
320 case kArm64Float64ToUint32: | |
321 case kArm64Float32ToInt64: | |
322 case kArm64Float64ToInt64: | |
323 case kArm64Float32ToUint64: | |
324 case kArm64Float64ToUint64: | |
325 case kArm64Int32ToFloat64: | |
326 case kArm64Int64ToFloat32: | |
327 case kArm64Int64ToFloat64: | |
328 case kArm64Uint32ToFloat64: | |
329 case kArm64Uint64ToFloat32: | |
330 case kArm64Uint64ToFloat64: | |
223 return 5; | 331 return 5; |
224 | 332 |
225 default: | 333 default: |
226 return 1; | 334 return 2; |
227 } | 335 } |
228 } | 336 } |
229 | 337 |
230 } // namespace compiler | 338 } // namespace compiler |
231 } // namespace internal | 339 } // namespace internal |
232 } // namespace v8 | 340 } // namespace v8 |
OLD | NEW |