blob: ec28b721980a051eb7ca17e19e7e01bb8be7d6d0 [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 Murdochda12d292016-06-02 14:46:10 +010051 case kArmAddPair:
52 case kArmSubPair:
53 case kArmMulPair:
54 case kArmLslPair:
55 case kArmLsrPair:
56 case kArmAsrPair:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000057 case kArmVcmpF32:
58 case kArmVaddF32:
59 case kArmVsubF32:
60 case kArmVmulF32:
61 case kArmVmlaF32:
62 case kArmVmlsF32:
63 case kArmVdivF32:
64 case kArmVabsF32:
65 case kArmVnegF32:
66 case kArmVsqrtF32:
67 case kArmVcmpF64:
68 case kArmVaddF64:
69 case kArmVsubF64:
70 case kArmVmulF64:
71 case kArmVmlaF64:
72 case kArmVmlsF64:
73 case kArmVdivF64:
74 case kArmVmodF64:
75 case kArmVabsF64:
76 case kArmVnegF64:
77 case kArmVsqrtF64:
78 case kArmVrintmF32:
79 case kArmVrintmF64:
80 case kArmVrintpF32:
81 case kArmVrintpF64:
82 case kArmVrintzF32:
83 case kArmVrintzF64:
84 case kArmVrintaF64:
85 case kArmVrintnF32:
86 case kArmVrintnF64:
87 case kArmVcvtF32F64:
88 case kArmVcvtF64F32:
Ben Murdoch097c5b22016-05-18 11:27:45 +010089 case kArmVcvtF32S32:
90 case kArmVcvtF32U32:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000091 case kArmVcvtF64S32:
92 case kArmVcvtF64U32:
Ben Murdoch097c5b22016-05-18 11:27:45 +010093 case kArmVcvtS32F32:
94 case kArmVcvtU32F32:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000095 case kArmVcvtS32F64:
96 case kArmVcvtU32F64:
97 case kArmVmovLowU32F64:
98 case kArmVmovLowF64U32:
99 case kArmVmovHighU32F64:
100 case kArmVmovHighF64U32:
101 case kArmVmovF64U32U32:
Ben Murdochc5610432016-08-08 18:44:38 +0100102 case kArmFloat64Max:
103 case kArmFloat64Min:
104 case kArmFloat32Max:
105 case kArmFloat32Min:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000106 return kNoOpcodeFlags;
107
108 case kArmVldrF32:
109 case kArmVldrF64:
110 case kArmLdrb:
111 case kArmLdrsb:
112 case kArmLdrh:
113 case kArmLdrsh:
114 case kArmLdr:
115 return kIsLoadOperation;
116
117 case kArmVstrF32:
118 case kArmVstrF64:
119 case kArmStrb:
120 case kArmStrh:
121 case kArmStr:
122 case kArmPush:
123 case kArmPoke:
124 return kHasSideEffect;
125
126#define CASE(Name) case k##Name:
127 COMMON_ARCH_OPCODE_LIST(CASE)
128#undef CASE
129 // Already covered in architecture independent code.
130 UNREACHABLE();
131 }
132
133 UNREACHABLE();
134 return kNoOpcodeFlags;
135}
136
137
138int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
139 // TODO(all): Add instruction cost modeling.
140 return 1;
141}
142
143} // namespace compiler
144} // namespace internal
145} // namespace v8