• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/instruction-scheduler.h"
6 
7 namespace v8 {
8 namespace internal {
9 namespace compiler {
10 
SchedulerSupported()11 bool InstructionScheduler::SchedulerSupported() { return true; }
12 
13 
GetTargetInstructionFlags(const Instruction * instr) const14 int 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 kArmSmull:
34     case kArmSmmla:
35     case kArmUmull:
36     case kArmSdiv:
37     case kArmUdiv:
38     case kArmMov:
39     case kArmMvn:
40     case kArmBfc:
41     case kArmUbfx:
42     case kArmSbfx:
43     case kArmSxtb:
44     case kArmSxth:
45     case kArmSxtab:
46     case kArmSxtah:
47     case kArmUxtb:
48     case kArmUxth:
49     case kArmUxtab:
50     case kArmUxtah:
51     case kArmRbit:
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       return kNoOpcodeFlags;
112 
113     case kArmVldrF32:
114     case kArmVldrF64:
115     case kArmLdrb:
116     case kArmLdrsb:
117     case kArmLdrh:
118     case kArmLdrsh:
119     case kArmLdr:
120       return kIsLoadOperation;
121 
122     case kArmVstrF32:
123     case kArmVstrF64:
124     case kArmStrb:
125     case kArmStrh:
126     case kArmStr:
127     case kArmPush:
128     case kArmPoke:
129       return kHasSideEffect;
130 
131 #define CASE(Name) case k##Name:
132     COMMON_ARCH_OPCODE_LIST(CASE)
133 #undef CASE
134       // Already covered in architecture independent code.
135       UNREACHABLE();
136   }
137 
138   UNREACHABLE();
139   return kNoOpcodeFlags;
140 }
141 
142 
GetInstructionLatency(const Instruction * instr)143 int InstructionScheduler::GetInstructionLatency(const Instruction* instr) {
144   // TODO(all): Add instruction cost modeling.
145   return 1;
146 }
147 
148 }  // namespace compiler
149 }  // namespace internal
150 }  // namespace v8
151