| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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-stubs.h" | 5 #include "src/code-stubs.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 4605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4616 assembler->UndefinedConstant()); | 4616 assembler->UndefinedConstant()); |
| 4617 | 4617 |
| 4618 return result; | 4618 return result; |
| 4619 } | 4619 } |
| 4620 | 4620 |
| 4621 void FastNewClosureStub::GenerateAssembly(CodeStubAssembler* assembler) const { | 4621 void FastNewClosureStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
| 4622 assembler->Return( | 4622 assembler->Return( |
| 4623 Generate(assembler, assembler->Parameter(0), assembler->Parameter(1))); | 4623 Generate(assembler, assembler->Parameter(0), assembler->Parameter(1))); |
| 4624 } | 4624 } |
| 4625 | 4625 |
| 4626 void FastNewFunctionContextStub::GenerateAssembly( | 4626 // static |
| 4627 CodeStubAssembler* assembler) const { | 4627 compiler::Node* FastNewFunctionContextStub::Generate( |
| 4628 CodeStubAssembler* assembler, compiler::Node* function, |
| 4629 compiler::Node* slots, compiler::Node* context) { |
| 4628 typedef CodeStubAssembler::Label Label; | 4630 typedef CodeStubAssembler::Label Label; |
| 4629 typedef compiler::Node Node; | 4631 typedef compiler::Node Node; |
| 4630 typedef CodeStubAssembler::Variable Variable; | 4632 typedef CodeStubAssembler::Variable Variable; |
| 4631 | 4633 |
| 4632 Node* function = assembler->Parameter(Descriptor::kFunction); | |
| 4633 Node* slots = assembler->Parameter(FastNewFunctionContextDescriptor::kSlots); | |
| 4634 Node* context = assembler->Parameter(Descriptor::kContext); | |
| 4635 | |
| 4636 Node* min_context_slots = | 4634 Node* min_context_slots = |
| 4637 assembler->Int32Constant(Context::MIN_CONTEXT_SLOTS); | 4635 assembler->Int32Constant(Context::MIN_CONTEXT_SLOTS); |
| 4638 Node* length = assembler->Int32Add(slots, min_context_slots); | 4636 Node* length = assembler->Int32Add(slots, min_context_slots); |
| 4639 Node* size = assembler->Int32Add( | 4637 Node* size = assembler->Int32Add( |
| 4640 assembler->Word32Shl(length, assembler->Int32Constant(kPointerSizeLog2)), | 4638 assembler->Word32Shl(length, assembler->Int32Constant(kPointerSizeLog2)), |
| 4641 assembler->Int32Constant(FixedArray::kHeaderSize)); | 4639 assembler->Int32Constant(FixedArray::kHeaderSize)); |
| 4642 | 4640 |
| 4643 // Create a new closure from the given function info in new space | 4641 // Create a new closure from the given function info in new space |
| 4644 Node* function_context = assembler->Allocate(size); | 4642 Node* function_context = assembler->Allocate(size); |
| 4645 | 4643 |
| 4644 Isolate* isolate = assembler->isolate(); |
| 4646 assembler->StoreMapNoWriteBarrier( | 4645 assembler->StoreMapNoWriteBarrier( |
| 4647 function_context, | 4646 function_context, |
| 4648 assembler->HeapConstant(isolate()->factory()->function_context_map())); | 4647 assembler->HeapConstant(isolate->factory()->function_context_map())); |
| 4649 assembler->StoreObjectFieldNoWriteBarrier(function_context, | 4648 assembler->StoreObjectFieldNoWriteBarrier(function_context, |
| 4650 Context::kLengthOffset, | 4649 Context::kLengthOffset, |
| 4651 assembler->SmiFromWord32(length)); | 4650 assembler->SmiFromWord32(length)); |
| 4652 | 4651 |
| 4653 // Set up the fixed slots. | 4652 // Set up the fixed slots. |
| 4654 assembler->StoreFixedArrayElement( | 4653 assembler->StoreFixedArrayElement( |
| 4655 function_context, assembler->Int32Constant(Context::CLOSURE_INDEX), | 4654 function_context, assembler->Int32Constant(Context::CLOSURE_INDEX), |
| 4656 function, SKIP_WRITE_BARRIER); | 4655 function, SKIP_WRITE_BARRIER); |
| 4657 assembler->StoreFixedArrayElement( | 4656 assembler->StoreFixedArrayElement( |
| 4658 function_context, assembler->Int32Constant(Context::PREVIOUS_INDEX), | 4657 function_context, assembler->Int32Constant(Context::PREVIOUS_INDEX), |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4682 assembler->StoreFixedArrayElement(function_context, slot_index, undefined, | 4681 assembler->StoreFixedArrayElement(function_context, slot_index, undefined, |
| 4683 SKIP_WRITE_BARRIER); | 4682 SKIP_WRITE_BARRIER); |
| 4684 Node* one = assembler->Int32Constant(1); | 4683 Node* one = assembler->Int32Constant(1); |
| 4685 Node* next_index = assembler->Int32Add(slot_index, one); | 4684 Node* next_index = assembler->Int32Add(slot_index, one); |
| 4686 var_slot_index.Bind(next_index); | 4685 var_slot_index.Bind(next_index); |
| 4687 assembler->Branch(assembler->Int32LessThan(next_index, length), &loop, | 4686 assembler->Branch(assembler->Int32LessThan(next_index, length), &loop, |
| 4688 &after_loop); | 4687 &after_loop); |
| 4689 } | 4688 } |
| 4690 assembler->Bind(&after_loop); | 4689 assembler->Bind(&after_loop); |
| 4691 | 4690 |
| 4692 assembler->Return(function_context); | 4691 return function_context; |
| 4692 } |
| 4693 |
| 4694 void FastNewFunctionContextStub::GenerateAssembly( |
| 4695 CodeStubAssembler* assembler) const { |
| 4696 typedef compiler::Node Node; |
| 4697 Node* function = assembler->Parameter(Descriptor::kFunction); |
| 4698 Node* slots = assembler->Parameter(FastNewFunctionContextDescriptor::kSlots); |
| 4699 Node* context = assembler->Parameter(Descriptor::kContext); |
| 4700 |
| 4701 assembler->Return(Generate(assembler, function, slots, context)); |
| 4693 } | 4702 } |
| 4694 | 4703 |
| 4695 void CreateAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { | 4704 void CreateAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { |
| 4696 CreateAllocationSiteStub stub(isolate); | 4705 CreateAllocationSiteStub stub(isolate); |
| 4697 stub.GetCode(); | 4706 stub.GetCode(); |
| 4698 } | 4707 } |
| 4699 | 4708 |
| 4700 | 4709 |
| 4701 void CreateWeakCellStub::GenerateAheadOfTime(Isolate* isolate) { | 4710 void CreateWeakCellStub::GenerateAheadOfTime(Isolate* isolate) { |
| 4702 CreateWeakCellStub stub(isolate); | 4711 CreateWeakCellStub stub(isolate); |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5062 if (type->Is(Type::UntaggedPointer())) { | 5071 if (type->Is(Type::UntaggedPointer())) { |
| 5063 return Representation::External(); | 5072 return Representation::External(); |
| 5064 } | 5073 } |
| 5065 | 5074 |
| 5066 DCHECK(!type->Is(Type::Untagged())); | 5075 DCHECK(!type->Is(Type::Untagged())); |
| 5067 return Representation::Tagged(); | 5076 return Representation::Tagged(); |
| 5068 } | 5077 } |
| 5069 | 5078 |
| 5070 } // namespace internal | 5079 } // namespace internal |
| 5071 } // namespace v8 | 5080 } // namespace v8 |
| OLD | NEW |