OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef V8_COMPILER_OPCODES_H_ | 5 #ifndef V8_COMPILER_OPCODES_H_ |
6 #define V8_COMPILER_OPCODES_H_ | 6 #define V8_COMPILER_OPCODES_H_ |
7 | 7 |
8 // Opcodes for control operators. | 8 // Opcodes for control operators. |
9 #define INNER_CONTROL_OP_LIST(V) \ | 9 #define INNER_CONTROL_OP_LIST(V) \ |
10 V(Dead) \ | 10 V(Dead) \ |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 V(JSDebugger) | 133 V(JSDebugger) |
134 | 134 |
135 #define JS_OP_LIST(V) \ | 135 #define JS_OP_LIST(V) \ |
136 JS_SIMPLE_BINOP_LIST(V) \ | 136 JS_SIMPLE_BINOP_LIST(V) \ |
137 JS_SIMPLE_UNOP_LIST(V) \ | 137 JS_SIMPLE_UNOP_LIST(V) \ |
138 JS_OBJECT_OP_LIST(V) \ | 138 JS_OBJECT_OP_LIST(V) \ |
139 JS_CONTEXT_OP_LIST(V) \ | 139 JS_CONTEXT_OP_LIST(V) \ |
140 JS_OTHER_OP_LIST(V) | 140 JS_OTHER_OP_LIST(V) |
141 | 141 |
142 // Opcodes for VirtuaMachine-level operators. | 142 // Opcodes for VirtuaMachine-level operators. |
143 #define SIMPLIFIED_OP_LIST(V) \ | 143 #define SIMPLIFIED_COMPARE_BINOP_LIST(V) \ |
144 V(AnyToBoolean) \ | 144 V(NumberEqual) \ |
145 V(BooleanNot) \ | 145 V(NumberLessThan) \ |
146 V(BooleanToNumber) \ | 146 V(NumberLessThanOrEqual) \ |
147 V(NumberEqual) \ | 147 V(ReferenceEqual) \ |
148 V(NumberLessThan) \ | 148 V(StringEqual) \ |
149 V(NumberLessThanOrEqual) \ | 149 V(StringLessThan) \ |
150 V(NumberAdd) \ | 150 V(StringLessThanOrEqual) |
151 V(NumberSubtract) \ | 151 |
152 V(NumberMultiply) \ | 152 #define SIMPLIFIED_OP_LIST(V) \ |
153 V(NumberDivide) \ | 153 SIMPLIFIED_COMPARE_BINOP_LIST(V) \ |
154 V(NumberModulus) \ | 154 V(AnyToBoolean) \ |
155 V(NumberToInt32) \ | 155 V(BooleanNot) \ |
156 V(NumberToUint32) \ | 156 V(BooleanToNumber) \ |
157 V(PlainPrimitiveToNumber) \ | 157 V(NumberAdd) \ |
158 V(ReferenceEqual) \ | 158 V(NumberSubtract) \ |
159 V(StringEqual) \ | 159 V(NumberMultiply) \ |
160 V(StringLessThan) \ | 160 V(NumberDivide) \ |
161 V(StringLessThanOrEqual) \ | 161 V(NumberModulus) \ |
162 V(StringAdd) \ | 162 V(NumberToInt32) \ |
163 V(ChangeTaggedToInt32) \ | 163 V(NumberToUint32) \ |
164 V(ChangeTaggedToUint32) \ | 164 V(PlainPrimitiveToNumber) \ |
165 V(ChangeTaggedToFloat64) \ | 165 V(StringAdd) \ |
166 V(ChangeInt32ToTagged) \ | 166 V(ChangeTaggedToInt32) \ |
167 V(ChangeUint32ToTagged) \ | 167 V(ChangeTaggedToUint32) \ |
168 V(ChangeFloat64ToTagged) \ | 168 V(ChangeTaggedToFloat64) \ |
169 V(ChangeBoolToBit) \ | 169 V(ChangeInt32ToTagged) \ |
170 V(ChangeBitToBool) \ | 170 V(ChangeUint32ToTagged) \ |
171 V(LoadField) \ | 171 V(ChangeFloat64ToTagged) \ |
172 V(LoadBuffer) \ | 172 V(ChangeBoolToBit) \ |
173 V(LoadElement) \ | 173 V(ChangeBitToBool) \ |
174 V(StoreField) \ | 174 V(LoadField) \ |
175 V(StoreBuffer) \ | 175 V(LoadBuffer) \ |
176 V(StoreElement) \ | 176 V(LoadElement) \ |
177 V(ObjectIsSmi) \ | 177 V(StoreField) \ |
| 178 V(StoreBuffer) \ |
| 179 V(StoreElement) \ |
| 180 V(ObjectIsSmi) \ |
178 V(ObjectIsNonNegativeSmi) | 181 V(ObjectIsNonNegativeSmi) |
179 | 182 |
180 // Opcodes for Machine-level operators. | 183 // Opcodes for Machine-level operators. |
181 #define MACHINE_OP_LIST(V) \ | 184 #define MACHINE_COMPARE_BINOP_LIST(V) \ |
182 V(Load) \ | 185 V(Word32Equal) \ |
183 V(Store) \ | 186 V(Word64Equal) \ |
184 V(Word32And) \ | 187 V(Int32LessThan) \ |
185 V(Word32Or) \ | 188 V(Int32LessThanOrEqual) \ |
186 V(Word32Xor) \ | 189 V(Uint32LessThan) \ |
187 V(Word32Shl) \ | 190 V(Uint32LessThanOrEqual) \ |
188 V(Word32Shr) \ | 191 V(Int64LessThan) \ |
189 V(Word32Sar) \ | 192 V(Int64LessThanOrEqual) \ |
190 V(Word32Ror) \ | 193 V(Uint64LessThan) \ |
191 V(Word32Equal) \ | 194 V(Float64Equal) \ |
192 V(Word64And) \ | 195 V(Float64LessThan) \ |
193 V(Word64Or) \ | 196 V(Float64LessThanOrEqual) |
194 V(Word64Xor) \ | 197 |
195 V(Word64Shl) \ | 198 #define MACHINE_OP_LIST(V) \ |
196 V(Word64Shr) \ | 199 MACHINE_COMPARE_BINOP_LIST(V) \ |
197 V(Word64Sar) \ | 200 V(Load) \ |
198 V(Word64Ror) \ | 201 V(Store) \ |
199 V(Word64Equal) \ | 202 V(Word32And) \ |
200 V(Int32Add) \ | 203 V(Word32Or) \ |
201 V(Int32AddWithOverflow) \ | 204 V(Word32Xor) \ |
202 V(Int32Sub) \ | 205 V(Word32Shl) \ |
203 V(Int32SubWithOverflow) \ | 206 V(Word32Shr) \ |
204 V(Int32Mul) \ | 207 V(Word32Sar) \ |
205 V(Int32MulHigh) \ | 208 V(Word32Ror) \ |
206 V(Int32Div) \ | 209 V(Word64And) \ |
207 V(Int32Mod) \ | 210 V(Word64Or) \ |
208 V(Int32LessThan) \ | 211 V(Word64Xor) \ |
209 V(Int32LessThanOrEqual) \ | 212 V(Word64Shl) \ |
210 V(Uint32Div) \ | 213 V(Word64Shr) \ |
211 V(Uint32LessThan) \ | 214 V(Word64Sar) \ |
212 V(Uint32LessThanOrEqual) \ | 215 V(Word64Ror) \ |
213 V(Uint32Mod) \ | 216 V(Int32Add) \ |
214 V(Uint32MulHigh) \ | 217 V(Int32AddWithOverflow) \ |
215 V(Int64Add) \ | 218 V(Int32Sub) \ |
216 V(Int64Sub) \ | 219 V(Int32SubWithOverflow) \ |
217 V(Int64Mul) \ | 220 V(Int32Mul) \ |
218 V(Int64Div) \ | 221 V(Int32MulHigh) \ |
219 V(Int64Mod) \ | 222 V(Int32Div) \ |
220 V(Int64LessThan) \ | 223 V(Int32Mod) \ |
221 V(Int64LessThanOrEqual) \ | 224 V(Uint32Div) \ |
222 V(Uint64Div) \ | 225 V(Uint32Mod) \ |
223 V(Uint64LessThan) \ | 226 V(Uint32MulHigh) \ |
224 V(Uint64Mod) \ | 227 V(Int64Add) \ |
225 V(ChangeFloat32ToFloat64) \ | 228 V(Int64Sub) \ |
226 V(ChangeFloat64ToInt32) \ | 229 V(Int64Mul) \ |
227 V(ChangeFloat64ToUint32) \ | 230 V(Int64Div) \ |
228 V(ChangeInt32ToFloat64) \ | 231 V(Int64Mod) \ |
229 V(ChangeInt32ToInt64) \ | 232 V(Uint64Div) \ |
230 V(ChangeUint32ToFloat64) \ | 233 V(Uint64Mod) \ |
231 V(ChangeUint32ToUint64) \ | 234 V(ChangeFloat32ToFloat64) \ |
232 V(TruncateFloat64ToFloat32) \ | 235 V(ChangeFloat64ToInt32) \ |
233 V(TruncateFloat64ToInt32) \ | 236 V(ChangeFloat64ToUint32) \ |
234 V(TruncateInt64ToInt32) \ | 237 V(ChangeInt32ToFloat64) \ |
235 V(Float64Add) \ | 238 V(ChangeInt32ToInt64) \ |
236 V(Float64Sub) \ | 239 V(ChangeUint32ToFloat64) \ |
237 V(Float64Mul) \ | 240 V(ChangeUint32ToUint64) \ |
238 V(Float64Div) \ | 241 V(TruncateFloat64ToFloat32) \ |
239 V(Float64Mod) \ | 242 V(TruncateFloat64ToInt32) \ |
240 V(Float64Sqrt) \ | 243 V(TruncateInt64ToInt32) \ |
241 V(Float64Equal) \ | 244 V(Float64Add) \ |
242 V(Float64LessThan) \ | 245 V(Float64Sub) \ |
243 V(Float64LessThanOrEqual) \ | 246 V(Float64Mul) \ |
244 V(Float64Floor) \ | 247 V(Float64Div) \ |
245 V(Float64Ceil) \ | 248 V(Float64Mod) \ |
246 V(Float64RoundTruncate) \ | 249 V(Float64Sqrt) \ |
247 V(Float64RoundTiesAway) \ | 250 V(Float64Floor) \ |
248 V(LoadStackPointer) \ | 251 V(Float64Ceil) \ |
249 V(CheckedLoad) \ | 252 V(Float64RoundTruncate) \ |
| 253 V(Float64RoundTiesAway) \ |
| 254 V(LoadStackPointer) \ |
| 255 V(CheckedLoad) \ |
250 V(CheckedStore) | 256 V(CheckedStore) |
251 | 257 |
252 #define VALUE_OP_LIST(V) \ | 258 #define VALUE_OP_LIST(V) \ |
253 COMMON_OP_LIST(V) \ | 259 COMMON_OP_LIST(V) \ |
254 SIMPLIFIED_OP_LIST(V) \ | 260 SIMPLIFIED_OP_LIST(V) \ |
255 MACHINE_OP_LIST(V) \ | 261 MACHINE_OP_LIST(V) \ |
256 JS_OP_LIST(V) | 262 JS_OP_LIST(V) |
257 | 263 |
258 // The combination of all operators at all levels and the common operators. | 264 // The combination of all operators at all levels and the common operators. |
259 #define ALL_OP_LIST(V) \ | 265 #define ALL_OP_LIST(V) \ |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 return kInt32Constant <= value && value <= kHeapConstant; | 307 return kInt32Constant <= value && value <= kHeapConstant; |
302 } | 308 } |
303 | 309 |
304 static bool IsPhiOpcode(Value value) { | 310 static bool IsPhiOpcode(Value value) { |
305 return value == kPhi || value == kEffectPhi; | 311 return value == kPhi || value == kEffectPhi; |
306 } | 312 } |
307 | 313 |
308 static bool IsMergeOpcode(Value value) { | 314 static bool IsMergeOpcode(Value value) { |
309 return value == kMerge || value == kLoop; | 315 return value == kMerge || value == kLoop; |
310 } | 316 } |
| 317 |
| 318 // Returns true if opcode for comparison operator. |
| 319 static bool IsComparisonOpcode(Value value) { |
| 320 return (kJSEqual <= value && value <= kJSGreaterThanOrEqual) || |
| 321 (kNumberEqual <= value && value <= kStringLessThanOrEqual) || |
| 322 (kWord32Equal <= value && value <= kFloat64LessThanOrEqual); |
| 323 } |
311 }; | 324 }; |
312 | 325 |
313 } // namespace compiler | 326 } // namespace compiler |
314 } // namespace internal | 327 } // namespace internal |
315 } // namespace v8 | 328 } // namespace v8 |
316 | 329 |
317 #endif // V8_COMPILER_OPCODES_H_ | 330 #endif // V8_COMPILER_OPCODES_H_ |
OLD | NEW |