blob: d950e8c97dde9bb773841574b60c18ed5b450fb6 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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/instruction-scheduler.h"
6
7namespace v8 {
8namespace internal {
9namespace compiler {
10
11bool InstructionScheduler::SchedulerSupported() { return true; }
12
13
14int InstructionScheduler::GetTargetInstructionFlags(
15 const Instruction* instr) const {
16 switch (instr->arch_opcode()) {
17 case kArmAdd:
18 case kArmAnd:
19 case kArmBic:
20 case kArmClz:
21 case kArmCmp:
22 case kArmCmn:
23 case kArmTst:
24 case kArmTeq:
25 case kArmOrr:
26 case kArmEor:
27 case kArmSub:
28 case kArmRsb:
29 case kArmMul:
30 case kArmMla:
31 case kArmMls:
32 case kArmSmmul:
33 case kArmSmmla:
34 case kArmUmull:
35 case kArmSdiv:
36 case kArmUdiv:
37 case kArmMov:
38 case kArmMvn:
39 case kArmBfc:
40 case kArmUbfx:
Ben Murdoch097c5b22016-05-18 11:27:45 +010041 case kArmSbfx:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000042 case kArmSxtb:
43 case kArmSxth:
44 case kArmSxtab:
45 case kArmSxtah:
46 case kArmUxtb:
47 case kArmUxth:
48 case kArmUxtab:
49 case kArmUxtah:
Ben Murdoch097c5b22016-05-18 11:27:45 +010050 case kArmRbit:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000051 case kArmVcmpF32:
52 case kArmVaddF32:
53 case kArmVsubF32:
54 case kArmVmulF32:
55 case kArmVmlaF32:
56 case kArmVmlsF32:
57 case kArmVdivF32:
58 case kArmVabsF32:
59 case kArmVnegF32:
60 case kArmVsqrtF32:
61 case kArmVcmpF64:
62 case kArmVaddF64:
63 case kArmVsubF64:
64 case kArmVmulF64:
65 case kArmVmlaF64:
66 case kArmVmlsF64:
67 case kArmVdivF64:
68 case kArmVmodF64:
69 case kArmVabsF64:
70 case kArmVnegF64:
71 case kArmVsqrtF64:
72 case kArmVrintmF32:
73 case kArmVrintmF64:
74 case kArmVrintpF32:
75 case kArmVrintpF64:
76 case kArmVrintzF32:
77 case kArmVrintzF64:
78 case kArmVrintaF64:
79 case kArmVrintnF32:
80 case kArmVrintnF64:
81 case kArmVcvtF32F64:
82 case kArmVcvtF64F32:
Ben Murdoch097c5b22016-05-18 11:27:45 +010083 case kArmVcvtF32S32:
84 case kArmVcvtF32U32:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000085 case kArmVcvtF64S32:
86 case kArmVcvtF64U32:
Ben Murdoch097c5b22016-05-18 11:27:45 +010087 case kArmVcvtS32F32:
88 case kArmVcvtU32F32:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000089 case kArmVcvtS32F64:
90 case kArmVcvtU32F64:
91 case kArmVmovLowU32F64:
92 case kArmVmovLowF64U32:
93 case kArmVmovHighU32F64:
94 case kArmVmovHighF64U32:
95 case kArmVmovF64U32U32:
96 return kNoOpcodeFlags;
97
98 case kArmVldrF32:
99 case kArmVldrF64:
100 case kArmLdrb:
101 case kArmLdrsb:
102 case kArmLdrh:
103 case kArmLdrsh:
104 case kArmLdr:
105 return kIsLoadOperation;
106
107 case kArmVstrF32:
108 case kArmVstrF64:
109 case kArmStrb:
110 case kArmStrh:
111 case kArmStr:
112 case kArmPush:
113 case kArmPoke:
114 return kHasSideEffect;
115
116#define CASE(Name) case k##Name:
117 COMMON_ARCH_OPCODE_LIST(CASE)
118#undef CASE
119 // Already covered in architecture independent code.
120 UNREACHABLE();
121 }
122
123 UNREACHABLE();
124 return kNoOpcodeFlags;
125}
126
127
128int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
129 // TODO(all): Add instruction cost modeling.
130 return 1;
131}
132
133} // namespace compiler
134} // namespace internal
135} // namespace v8