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/code-factory.h" | 5 #include "src/code-factory.h" |
6 #include "src/code-stubs.h" | 6 #include "src/code-stubs.h" |
7 #include "src/compiler/common-operator.h" | 7 #include "src/compiler/common-operator.h" |
8 #include "src/compiler/graph-inl.h" | 8 #include "src/compiler/graph-inl.h" |
9 #include "src/compiler/js-generic-lowering.h" | 9 #include "src/compiler/js-generic-lowering.h" |
10 #include "src/compiler/machine-operator.h" | 10 #include "src/compiler/machine-operator.h" |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 } | 274 } |
275 | 275 |
276 | 276 |
277 void JSGenericLowering::LowerJSLoadProperty(Node* node) { | 277 void JSGenericLowering::LowerJSLoadProperty(Node* node) { |
278 Callable callable = CodeFactory::KeyedLoadIC(isolate()); | 278 Callable callable = CodeFactory::KeyedLoadIC(isolate()); |
279 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); | 279 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); |
280 } | 280 } |
281 | 281 |
282 | 282 |
283 void JSGenericLowering::LowerJSLoadNamed(Node* node) { | 283 void JSGenericLowering::LowerJSLoadNamed(Node* node) { |
284 LoadNamedParameters p = OpParameter<LoadNamedParameters>(node); | 284 const LoadNamedParameters& p = LoadNamedParametersOf(node->op()); |
285 Callable callable = CodeFactory::LoadIC(isolate(), p.contextual_mode); | 285 Callable callable = CodeFactory::LoadIC(isolate(), p.contextual_mode()); |
286 PatchInsertInput(node, 1, jsgraph()->HeapConstant(p.name)); | 286 PatchInsertInput(node, 1, jsgraph()->HeapConstant(p.name())); |
287 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); | 287 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); |
288 } | 288 } |
289 | 289 |
290 | 290 |
291 void JSGenericLowering::LowerJSStoreProperty(Node* node) { | 291 void JSGenericLowering::LowerJSStoreProperty(Node* node) { |
292 StrictMode strict_mode = OpParameter<StrictMode>(node); | 292 StrictMode strict_mode = OpParameter<StrictMode>(node); |
293 Callable callable = CodeFactory::KeyedStoreIC(isolate(), strict_mode); | 293 Callable callable = CodeFactory::KeyedStoreIC(isolate(), strict_mode); |
294 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); | 294 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); |
295 } | 295 } |
296 | 296 |
297 | 297 |
298 void JSGenericLowering::LowerJSStoreNamed(Node* node) { | 298 void JSGenericLowering::LowerJSStoreNamed(Node* node) { |
299 StoreNamedParameters params = OpParameter<StoreNamedParameters>(node); | 299 const StoreNamedParameters& p = StoreNamedParametersOf(node->op()); |
300 Callable callable = CodeFactory::StoreIC(isolate(), params.strict_mode); | 300 Callable callable = CodeFactory::StoreIC(isolate(), p.strict_mode()); |
301 PatchInsertInput(node, 1, jsgraph()->HeapConstant(params.name)); | 301 PatchInsertInput(node, 1, jsgraph()->HeapConstant(p.name())); |
302 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); | 302 ReplaceWithStubCall(node, callable, CallDescriptor::kPatchableCallSite); |
303 } | 303 } |
304 | 304 |
305 | 305 |
306 void JSGenericLowering::LowerJSDeleteProperty(Node* node) { | 306 void JSGenericLowering::LowerJSDeleteProperty(Node* node) { |
307 StrictMode strict_mode = OpParameter<StrictMode>(node); | 307 StrictMode strict_mode = OpParameter<StrictMode>(node); |
308 PatchInsertInput(node, 2, SmiConstant(strict_mode)); | 308 PatchInsertInput(node, 2, SmiConstant(strict_mode)); |
309 ReplaceWithBuiltinCall(node, Builtins::DELETE, 3); | 309 ReplaceWithBuiltinCall(node, Builtins::DELETE, 3); |
310 } | 310 } |
311 | 311 |
(...skipping 11 matching lines...) Expand all Loading... |
323 CallInterfaceDescriptor d = stub.GetCallInterfaceDescriptor(); | 323 CallInterfaceDescriptor d = stub.GetCallInterfaceDescriptor(); |
324 CallDescriptor* desc = | 324 CallDescriptor* desc = |
325 linkage()->GetStubCallDescriptor(d, 0, FlagsForNode(node)); | 325 linkage()->GetStubCallDescriptor(d, 0, FlagsForNode(node)); |
326 Node* stub_code = CodeConstant(stub.GetCode()); | 326 Node* stub_code = CodeConstant(stub.GetCode()); |
327 PatchInsertInput(node, 0, stub_code); | 327 PatchInsertInput(node, 0, stub_code); |
328 PatchOperator(node, common()->Call(desc)); | 328 PatchOperator(node, common()->Call(desc)); |
329 } | 329 } |
330 | 330 |
331 | 331 |
332 void JSGenericLowering::LowerJSLoadContext(Node* node) { | 332 void JSGenericLowering::LowerJSLoadContext(Node* node) { |
333 ContextAccess access = OpParameter<ContextAccess>(node); | 333 const ContextAccess& access = ContextAccessOf(node->op()); |
334 // TODO(mstarzinger): Use simplified operators instead of machine operators | 334 // TODO(mstarzinger): Use simplified operators instead of machine operators |
335 // here so that load/store optimization can be applied afterwards. | 335 // here so that load/store optimization can be applied afterwards. |
336 for (int i = 0; i < access.depth(); ++i) { | 336 for (size_t i = 0; i < access.depth(); ++i) { |
337 node->ReplaceInput( | 337 node->ReplaceInput( |
338 0, graph()->NewNode( | 338 0, graph()->NewNode( |
339 machine()->Load(kMachAnyTagged), | 339 machine()->Load(kMachAnyTagged), |
340 NodeProperties::GetValueInput(node, 0), | 340 NodeProperties::GetValueInput(node, 0), |
341 Int32Constant(Context::SlotOffset(Context::PREVIOUS_INDEX)), | 341 Int32Constant(Context::SlotOffset(Context::PREVIOUS_INDEX)), |
342 NodeProperties::GetEffectInput(node))); | 342 NodeProperties::GetEffectInput(node))); |
343 } | 343 } |
344 node->ReplaceInput(1, Int32Constant(Context::SlotOffset(access.index()))); | 344 node->ReplaceInput( |
| 345 1, Int32Constant(Context::SlotOffset(static_cast<int>(access.index())))); |
345 PatchOperator(node, machine()->Load(kMachAnyTagged)); | 346 PatchOperator(node, machine()->Load(kMachAnyTagged)); |
346 } | 347 } |
347 | 348 |
348 | 349 |
349 void JSGenericLowering::LowerJSStoreContext(Node* node) { | 350 void JSGenericLowering::LowerJSStoreContext(Node* node) { |
350 ContextAccess access = OpParameter<ContextAccess>(node); | 351 const ContextAccess& access = ContextAccessOf(node->op()); |
351 // TODO(mstarzinger): Use simplified operators instead of machine operators | 352 // TODO(mstarzinger): Use simplified operators instead of machine operators |
352 // here so that load/store optimization can be applied afterwards. | 353 // here so that load/store optimization can be applied afterwards. |
353 for (int i = 0; i < access.depth(); ++i) { | 354 for (size_t i = 0; i < access.depth(); ++i) { |
354 node->ReplaceInput( | 355 node->ReplaceInput( |
355 0, graph()->NewNode( | 356 0, graph()->NewNode( |
356 machine()->Load(kMachAnyTagged), | 357 machine()->Load(kMachAnyTagged), |
357 NodeProperties::GetValueInput(node, 0), | 358 NodeProperties::GetValueInput(node, 0), |
358 Int32Constant(Context::SlotOffset(Context::PREVIOUS_INDEX)), | 359 Int32Constant(Context::SlotOffset(Context::PREVIOUS_INDEX)), |
359 NodeProperties::GetEffectInput(node))); | 360 NodeProperties::GetEffectInput(node))); |
360 } | 361 } |
361 node->ReplaceInput(2, NodeProperties::GetValueInput(node, 1)); | 362 node->ReplaceInput(2, NodeProperties::GetValueInput(node, 1)); |
362 node->ReplaceInput(1, Int32Constant(Context::SlotOffset(access.index()))); | 363 node->ReplaceInput( |
| 364 1, Int32Constant(Context::SlotOffset(static_cast<int>(access.index())))); |
363 PatchOperator(node, machine()->Store(StoreRepresentation(kMachAnyTagged, | 365 PatchOperator(node, machine()->Store(StoreRepresentation(kMachAnyTagged, |
364 kFullWriteBarrier))); | 366 kFullWriteBarrier))); |
365 } | 367 } |
366 | 368 |
367 | 369 |
368 void JSGenericLowering::LowerJSCallConstruct(Node* node) { | 370 void JSGenericLowering::LowerJSCallConstruct(Node* node) { |
369 int arity = OpParameter<int>(node); | 371 int arity = OpParameter<int>(node); |
370 CallConstructStub stub(isolate(), NO_CALL_CONSTRUCTOR_FLAGS); | 372 CallConstructStub stub(isolate(), NO_CALL_CONSTRUCTOR_FLAGS); |
371 CallInterfaceDescriptor d = stub.GetCallInterfaceDescriptor(); | 373 CallInterfaceDescriptor d = stub.GetCallInterfaceDescriptor(); |
372 CallDescriptor* desc = | 374 CallDescriptor* desc = |
373 linkage()->GetStubCallDescriptor(d, arity, FlagsForNode(node)); | 375 linkage()->GetStubCallDescriptor(d, arity, FlagsForNode(node)); |
374 Node* stub_code = CodeConstant(stub.GetCode()); | 376 Node* stub_code = CodeConstant(stub.GetCode()); |
375 Node* construct = NodeProperties::GetValueInput(node, 0); | 377 Node* construct = NodeProperties::GetValueInput(node, 0); |
376 PatchInsertInput(node, 0, stub_code); | 378 PatchInsertInput(node, 0, stub_code); |
377 PatchInsertInput(node, 1, Int32Constant(arity - 1)); | 379 PatchInsertInput(node, 1, Int32Constant(arity - 1)); |
378 PatchInsertInput(node, 2, construct); | 380 PatchInsertInput(node, 2, construct); |
379 PatchInsertInput(node, 3, jsgraph()->UndefinedConstant()); | 381 PatchInsertInput(node, 3, jsgraph()->UndefinedConstant()); |
380 PatchOperator(node, common()->Call(desc)); | 382 PatchOperator(node, common()->Call(desc)); |
381 } | 383 } |
382 | 384 |
383 | 385 |
384 void JSGenericLowering::LowerJSCallFunction(Node* node) { | 386 void JSGenericLowering::LowerJSCallFunction(Node* node) { |
385 CallParameters p = OpParameter<CallParameters>(node); | 387 const CallFunctionParameters& p = CallFunctionParametersOf(node->op()); |
386 CallFunctionStub stub(isolate(), p.arity - 2, p.flags); | 388 CallFunctionStub stub(isolate(), static_cast<int>(p.arity() - 2), p.flags()); |
387 CallInterfaceDescriptor d = stub.GetCallInterfaceDescriptor(); | 389 CallInterfaceDescriptor d = stub.GetCallInterfaceDescriptor(); |
388 CallDescriptor* desc = | 390 CallDescriptor* desc = linkage()->GetStubCallDescriptor( |
389 linkage()->GetStubCallDescriptor(d, p.arity - 1, FlagsForNode(node)); | 391 d, static_cast<int>(p.arity() - 1), FlagsForNode(node)); |
390 Node* stub_code = CodeConstant(stub.GetCode()); | 392 Node* stub_code = CodeConstant(stub.GetCode()); |
391 PatchInsertInput(node, 0, stub_code); | 393 PatchInsertInput(node, 0, stub_code); |
392 PatchOperator(node, common()->Call(desc)); | 394 PatchOperator(node, common()->Call(desc)); |
393 } | 395 } |
394 | 396 |
395 | 397 |
396 void JSGenericLowering::LowerJSCallRuntime(Node* node) { | 398 void JSGenericLowering::LowerJSCallRuntime(Node* node) { |
397 Runtime::FunctionId function = OpParameter<Runtime::FunctionId>(node); | 399 const CallRuntimeParameters& p = CallRuntimeParametersOf(node->op()); |
398 int arity = OperatorProperties::GetValueInputCount(node->op()); | 400 ReplaceWithRuntimeCall(node, p.id(), static_cast<int>(p.arity())); |
399 ReplaceWithRuntimeCall(node, function, arity); | |
400 } | 401 } |
401 | 402 |
402 } // namespace compiler | 403 } // namespace compiler |
403 } // namespace internal | 404 } // namespace internal |
404 } // namespace v8 | 405 } // namespace v8 |
OLD | NEW |