Chromium Code Reviews| 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 |