| OLD | NEW | 
|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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-stub-assembler.h" | 5 #include "src/code-stub-assembler.h" | 
| 6 #include "src/code-factory.h" | 6 #include "src/code-factory.h" | 
| 7 #include "src/frames-inl.h" | 7 #include "src/frames-inl.h" | 
| 8 #include "src/frames.h" | 8 #include "src/frames.h" | 
| 9 #include "src/ic/handler-configuration.h" | 9 #include "src/ic/handler-configuration.h" | 
| 10 #include "src/ic/stub-cache.h" | 10 #include "src/ic/stub-cache.h" | 
| (...skipping 3868 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3879 | 3879 | 
| 3880       var_holder.Bind(proto); | 3880       var_holder.Bind(proto); | 
| 3881       var_holder_map.Bind(map); | 3881       var_holder_map.Bind(map); | 
| 3882       var_holder_instance_type.Bind(instance_type); | 3882       var_holder_instance_type.Bind(instance_type); | 
| 3883       Goto(&loop); | 3883       Goto(&loop); | 
| 3884     } | 3884     } | 
| 3885   } | 3885   } | 
| 3886 } | 3886 } | 
| 3887 | 3887 | 
| 3888 Node* CodeStubAssembler::OrdinaryHasInstance(Node* context, Node* callable, | 3888 Node* CodeStubAssembler::OrdinaryHasInstance(Node* context, Node* callable, | 
| 3889                                              Node* object) { | 3889                                              Node* object, | 
|  | 3890                                              VectorSlotPair feedback) { | 
| 3890   Variable var_result(this, MachineRepresentation::kTagged); | 3891   Variable var_result(this, MachineRepresentation::kTagged); | 
| 3891   Label return_false(this), return_true(this), | 3892   Label return_false(this), return_true(this), | 
| 3892       return_runtime(this, Label::kDeferred), return_result(this); | 3893       return_runtime(this, Label::kDeferred), return_result(this); | 
| 3893 | 3894 | 
| 3894   // Goto runtime if {object} is a Smi. | 3895   // Goto runtime if {object} is a Smi. | 
| 3895   GotoIf(WordIsSmi(object), &return_runtime); | 3896   GotoIf(WordIsSmi(object), &return_runtime); | 
| 3896 | 3897 | 
| 3897   // Load map of {object}. | 3898   // Load map of {object}. | 
| 3898   Node* object_map = LoadMap(object); | 3899   Node* object_map = LoadMap(object); | 
| 3899 | 3900 | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4004 | 4005 | 
| 4005   Bind(&return_false); | 4006   Bind(&return_false); | 
| 4006   StoreRoot(Heap::kInstanceofCacheAnswerRootIndex, BooleanConstant(false)); | 4007   StoreRoot(Heap::kInstanceofCacheAnswerRootIndex, BooleanConstant(false)); | 
| 4007   var_result.Bind(BooleanConstant(false)); | 4008   var_result.Bind(BooleanConstant(false)); | 
| 4008   Goto(&return_result); | 4009   Goto(&return_result); | 
| 4009 | 4010 | 
| 4010   Bind(&return_runtime); | 4011   Bind(&return_runtime); | 
| 4011   { | 4012   { | 
| 4012     // Invalidate the global instanceof cache. | 4013     // Invalidate the global instanceof cache. | 
| 4013     StoreRoot(Heap::kInstanceofCacheFunctionRootIndex, SmiConstant(0)); | 4014     StoreRoot(Heap::kInstanceofCacheFunctionRootIndex, SmiConstant(0)); | 
|  | 4015 | 
|  | 4016     // Record megamorphic {feedback} if requested; we use this feedback to | 
|  | 4017     // guard a bunch of speculative optimizations in TurboFand (and Crankshaft) | 
|  | 4018     // that just deoptimize in case of funny inputs to instanceof. | 
|  | 4019     if (feedback.IsValid()) { | 
|  | 4020       Node* megamorphic_sentinel = | 
|  | 4021           HeapConstant(TypeFeedbackVector::MegamorphicSentinel(isolate())); | 
|  | 4022       StoreFixedArrayElement(feedback.vector(), feedback.index(), | 
|  | 4023                              megamorphic_sentinel, SKIP_WRITE_BARRIER); | 
|  | 4024     } | 
|  | 4025 | 
| 4014     // Fallback to the runtime implementation. | 4026     // Fallback to the runtime implementation. | 
| 4015     var_result.Bind( | 4027     var_result.Bind( | 
| 4016         CallRuntime(Runtime::kOrdinaryHasInstance, context, callable, object)); | 4028         CallRuntime(Runtime::kOrdinaryHasInstance, context, callable, object)); | 
| 4017   } | 4029   } | 
| 4018   Goto(&return_result); | 4030   Goto(&return_result); | 
| 4019 | 4031 | 
| 4020   Bind(&return_result); | 4032   Bind(&return_result); | 
| 4021   return var_result.value(); | 4033   return var_result.value(); | 
| 4022 } | 4034 } | 
| 4023 | 4035 | 
| (...skipping 1615 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5639                        Heap::kTheHoleValueRootIndex); | 5651                        Heap::kTheHoleValueRootIndex); | 
| 5640 | 5652 | 
| 5641   // Store the WeakCell in the feedback vector. | 5653   // Store the WeakCell in the feedback vector. | 
| 5642   StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, | 5654   StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, | 
| 5643                          CodeStubAssembler::SMI_PARAMETERS); | 5655                          CodeStubAssembler::SMI_PARAMETERS); | 
| 5644   return cell; | 5656   return cell; | 
| 5645 } | 5657 } | 
| 5646 | 5658 | 
| 5647 }  // namespace internal | 5659 }  // namespace internal | 
| 5648 }  // namespace v8 | 5660 }  // namespace v8 | 
| OLD | NEW | 
|---|