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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/code-stub-assembler.h ('k') | src/code-stubs.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stub-assembler.cc
diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
index 5295189a8e7816bdc7947828b3486554c0596e31..e0cf5794ab14421e9dba5163bbae062a04662b46 100644
--- a/src/code-stub-assembler.cc
+++ b/src/code-stub-assembler.cc
@@ -1116,12 +1116,32 @@ Node* CodeStubAssembler::StoreObjectField(
IntPtrConstant(offset - kHeapObjectTag), value);
}
+Node* CodeStubAssembler::StoreObjectField(Node* object, Node* offset,
+ Node* value) {
+ int const_offset;
+ if (ToInt32Constant(offset, const_offset)) {
+ return StoreObjectField(object, const_offset, value);
+ }
+ return Store(MachineRepresentation::kTagged, object,
+ IntPtrSub(offset, IntPtrConstant(kHeapObjectTag)), value);
+}
+
Node* CodeStubAssembler::StoreObjectFieldNoWriteBarrier(
Node* object, int offset, Node* value, MachineRepresentation rep) {
return StoreNoWriteBarrier(rep, object,
IntPtrConstant(offset - kHeapObjectTag), value);
}
+Node* CodeStubAssembler::StoreObjectFieldNoWriteBarrier(
+ Node* object, Node* offset, Node* value, MachineRepresentation rep) {
+ int const_offset;
+ if (ToInt32Constant(offset, const_offset)) {
+ return StoreObjectFieldNoWriteBarrier(object, const_offset, value, rep);
+ }
+ return StoreNoWriteBarrier(
+ rep, object, IntPtrSub(offset, IntPtrConstant(kHeapObjectTag)), value);
+}
+
Node* CodeStubAssembler::StoreMapNoWriteBarrier(Node* object, Node* map) {
return StoreNoWriteBarrier(
MachineRepresentation::kTagged, object,
@@ -5080,15 +5100,22 @@ void CodeStubAssembler::StoreNamedField(Node* object, FieldIndex index,
Node* value, bool transition_to_field) {
DCHECK_EQ(index.is_double(), representation.IsDouble());
+ StoreNamedField(object, IntPtrConstant(index.offset()), index.is_inobject(),
+ representation, value, transition_to_field);
+}
+
+void CodeStubAssembler::StoreNamedField(Node* object, Node* offset,
+ bool is_inobject,
+ Representation representation,
+ Node* value, bool transition_to_field) {
bool store_value_as_double = representation.IsDouble();
- int offset = index.offset();
Node* property_storage = object;
- if (!index.is_inobject()) {
+ if (!is_inobject) {
property_storage = LoadProperties(object);
}
if (representation.IsDouble()) {
- if (!FLAG_unbox_double_fields || !index.is_inobject()) {
+ if (!FLAG_unbox_double_fields || !is_inobject) {
if (transition_to_field) {
Node* heap_number = AllocateHeapNumberWithValue(value, MUTABLE);
// Store the new mutable heap number into the object.
@@ -5098,7 +5125,7 @@ void CodeStubAssembler::StoreNamedField(Node* object, FieldIndex index,
// Load the heap number.
property_storage = LoadObjectField(property_storage, offset);
// Store the double value into it.
- offset = HeapNumber::kValueOffset;
+ offset = IntPtrConstant(HeapNumber::kValueOffset);
}
}
}
« 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