Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/code-stub-assembler.cc

Issue 2397573004: [stubs] Reduce number of StoreTransitionStub instances. (Closed)
Patch Set: Cleanup Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/code-stub-assembler.h ('k') | src/code-stubs.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 return StoreObjectFieldNoWriteBarrier(object, HeapNumber::kValueOffset, value, 1109 return StoreObjectFieldNoWriteBarrier(object, HeapNumber::kValueOffset, value,
1110 MachineRepresentation::kFloat64); 1110 MachineRepresentation::kFloat64);
1111 } 1111 }
1112 1112
1113 Node* CodeStubAssembler::StoreObjectField( 1113 Node* CodeStubAssembler::StoreObjectField(
1114 Node* object, int offset, Node* value) { 1114 Node* object, int offset, Node* value) {
1115 return Store(MachineRepresentation::kTagged, object, 1115 return Store(MachineRepresentation::kTagged, object,
1116 IntPtrConstant(offset - kHeapObjectTag), value); 1116 IntPtrConstant(offset - kHeapObjectTag), value);
1117 } 1117 }
1118 1118
1119 Node* CodeStubAssembler::StoreObjectField(Node* object, Node* offset,
1120 Node* value) {
1121 int const_offset;
1122 if (ToInt32Constant(offset, const_offset)) {
1123 return StoreObjectField(object, const_offset, value);
1124 }
1125 return Store(MachineRepresentation::kTagged, object,
1126 IntPtrSub(offset, IntPtrConstant(kHeapObjectTag)), value);
1127 }
1128
1119 Node* CodeStubAssembler::StoreObjectFieldNoWriteBarrier( 1129 Node* CodeStubAssembler::StoreObjectFieldNoWriteBarrier(
1120 Node* object, int offset, Node* value, MachineRepresentation rep) { 1130 Node* object, int offset, Node* value, MachineRepresentation rep) {
1121 return StoreNoWriteBarrier(rep, object, 1131 return StoreNoWriteBarrier(rep, object,
1122 IntPtrConstant(offset - kHeapObjectTag), value); 1132 IntPtrConstant(offset - kHeapObjectTag), value);
1123 } 1133 }
1124 1134
1135 Node* CodeStubAssembler::StoreObjectFieldNoWriteBarrier(
1136 Node* object, Node* offset, Node* value, MachineRepresentation rep) {
1137 int const_offset;
1138 if (ToInt32Constant(offset, const_offset)) {
1139 return StoreObjectFieldNoWriteBarrier(object, const_offset, value, rep);
1140 }
1141 return StoreNoWriteBarrier(
1142 rep, object, IntPtrSub(offset, IntPtrConstant(kHeapObjectTag)), value);
1143 }
1144
1125 Node* CodeStubAssembler::StoreMapNoWriteBarrier(Node* object, Node* map) { 1145 Node* CodeStubAssembler::StoreMapNoWriteBarrier(Node* object, Node* map) {
1126 return StoreNoWriteBarrier( 1146 return StoreNoWriteBarrier(
1127 MachineRepresentation::kTagged, object, 1147 MachineRepresentation::kTagged, object,
1128 IntPtrConstant(HeapNumber::kMapOffset - kHeapObjectTag), map); 1148 IntPtrConstant(HeapNumber::kMapOffset - kHeapObjectTag), map);
1129 } 1149 }
1130 1150
1131 Node* CodeStubAssembler::StoreObjectFieldRoot(Node* object, int offset, 1151 Node* CodeStubAssembler::StoreObjectFieldRoot(Node* object, int offset,
1132 Heap::RootListIndex root_index) { 1152 Heap::RootListIndex root_index) {
1133 if (Heap::RootIsImmortalImmovable(root_index)) { 1153 if (Heap::RootIsImmortalImmovable(root_index)) {
1134 return StoreObjectFieldNoWriteBarrier(object, offset, LoadRoot(root_index)); 1154 return StoreObjectFieldNoWriteBarrier(object, offset, LoadRoot(root_index));
(...skipping 3938 matching lines...) Expand 10 before | Expand all | Expand 10 after
5073 DCHECK(representation.IsTagged()); 5093 DCHECK(representation.IsTagged());
5074 } 5094 }
5075 return value; 5095 return value;
5076 } 5096 }
5077 5097
5078 void CodeStubAssembler::StoreNamedField(Node* object, FieldIndex index, 5098 void CodeStubAssembler::StoreNamedField(Node* object, FieldIndex index,
5079 Representation representation, 5099 Representation representation,
5080 Node* value, bool transition_to_field) { 5100 Node* value, bool transition_to_field) {
5081 DCHECK_EQ(index.is_double(), representation.IsDouble()); 5101 DCHECK_EQ(index.is_double(), representation.IsDouble());
5082 5102
5103 StoreNamedField(object, IntPtrConstant(index.offset()), index.is_inobject(),
5104 representation, value, transition_to_field);
5105 }
5106
5107 void CodeStubAssembler::StoreNamedField(Node* object, Node* offset,
5108 bool is_inobject,
5109 Representation representation,
5110 Node* value, bool transition_to_field) {
5083 bool store_value_as_double = representation.IsDouble(); 5111 bool store_value_as_double = representation.IsDouble();
5084 int offset = index.offset();
5085 Node* property_storage = object; 5112 Node* property_storage = object;
5086 if (!index.is_inobject()) { 5113 if (!is_inobject) {
5087 property_storage = LoadProperties(object); 5114 property_storage = LoadProperties(object);
5088 } 5115 }
5089 5116
5090 if (representation.IsDouble()) { 5117 if (representation.IsDouble()) {
5091 if (!FLAG_unbox_double_fields || !index.is_inobject()) { 5118 if (!FLAG_unbox_double_fields || !is_inobject) {
5092 if (transition_to_field) { 5119 if (transition_to_field) {
5093 Node* heap_number = AllocateHeapNumberWithValue(value, MUTABLE); 5120 Node* heap_number = AllocateHeapNumberWithValue(value, MUTABLE);
5094 // Store the new mutable heap number into the object. 5121 // Store the new mutable heap number into the object.
5095 value = heap_number; 5122 value = heap_number;
5096 store_value_as_double = false; 5123 store_value_as_double = false;
5097 } else { 5124 } else {
5098 // Load the heap number. 5125 // Load the heap number.
5099 property_storage = LoadObjectField(property_storage, offset); 5126 property_storage = LoadObjectField(property_storage, offset);
5100 // Store the double value into it. 5127 // Store the double value into it.
5101 offset = HeapNumber::kValueOffset; 5128 offset = IntPtrConstant(HeapNumber::kValueOffset);
5102 } 5129 }
5103 } 5130 }
5104 } 5131 }
5105 5132
5106 if (store_value_as_double) { 5133 if (store_value_as_double) {
5107 StoreObjectFieldNoWriteBarrier(property_storage, offset, value, 5134 StoreObjectFieldNoWriteBarrier(property_storage, offset, value,
5108 MachineRepresentation::kFloat64); 5135 MachineRepresentation::kFloat64);
5109 } else if (representation.IsSmi()) { 5136 } else if (representation.IsSmi()) {
5110 StoreObjectFieldNoWriteBarrier(property_storage, offset, value); 5137 StoreObjectFieldNoWriteBarrier(property_storage, offset, value);
5111 } else { 5138 } else {
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
5695 Heap::kTheHoleValueRootIndex); 5722 Heap::kTheHoleValueRootIndex);
5696 5723
5697 // Store the WeakCell in the feedback vector. 5724 // Store the WeakCell in the feedback vector.
5698 StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 5725 StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER,
5699 CodeStubAssembler::SMI_PARAMETERS); 5726 CodeStubAssembler::SMI_PARAMETERS);
5700 return cell; 5727 return cell;
5701 } 5728 }
5702 5729
5703 } // namespace internal 5730 } // namespace internal
5704 } // namespace v8 5731 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stub-assembler.h ('k') | src/code-stubs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698