Commit 3f675bbd authored by Dan Elphick's avatar Dan Elphick Committed by Commit Bot

[cleanup] TNodify CSA::Store methods

Converts StoreObjectField, StoreMapNoWriteBarrier and
StoreObjectFieldRoot to use TNode parameters and convert all of their
uses.

Bug: v8:10021
Change-Id: Ic0511e43677f6aaaeac20df58a69be74156d390f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1980581Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
Reviewed-by: 's avatarMythri Alle <mythria@chromium.org>
Commit-Queue: Dan Elphick <delphick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65605}
parent 6951b5c6
...@@ -498,8 +498,8 @@ TF_BUILTIN(AsyncGeneratorResolve, AsyncGeneratorBuiltinsAssembler) { ...@@ -498,8 +498,8 @@ TF_BUILTIN(AsyncGeneratorResolve, AsyncGeneratorBuiltinsAssembler) {
// Let iteratorResult be CreateIterResultObject(value, done). // Let iteratorResult be CreateIterResultObject(value, done).
const TNode<HeapObject> iter_result = Allocate(JSIteratorResult::kSize); const TNode<HeapObject> iter_result = Allocate(JSIteratorResult::kSize);
{ {
TNode<Object> map = LoadContextElement(LoadNativeContext(context), TNode<Map> map = CAST(LoadContextElement(
Context::ITERATOR_RESULT_MAP_INDEX); LoadNativeContext(context), Context::ITERATOR_RESULT_MAP_INDEX));
StoreMapNoWriteBarrier(iter_result, map); StoreMapNoWriteBarrier(iter_result, map);
StoreObjectFieldRoot(iter_result, JSIteratorResult::kPropertiesOrHashOffset, StoreObjectFieldRoot(iter_result, JSIteratorResult::kPropertiesOrHashOffset,
RootIndex::kEmptyFixedArray); RootIndex::kEmptyFixedArray);
......
...@@ -45,7 +45,7 @@ class BaseCollectionsAssembler : public CodeStubAssembler { ...@@ -45,7 +45,7 @@ class BaseCollectionsAssembler : public CodeStubAssembler {
// possible. // possible.
void AddConstructorEntries(Variant variant, TNode<Context> context, void AddConstructorEntries(Variant variant, TNode<Context> context,
TNode<Context> native_context, TNode<Context> native_context,
TNode<Object> collection, TNode<HeapObject> collection,
TNode<Object> initial_entries); TNode<Object> initial_entries);
// Fast path for adding constructor entries. Assumes the entries are a fast // Fast path for adding constructor entries. Assumes the entries are a fast
...@@ -172,7 +172,7 @@ void BaseCollectionsAssembler::AddConstructorEntry( ...@@ -172,7 +172,7 @@ void BaseCollectionsAssembler::AddConstructorEntry(
void BaseCollectionsAssembler::AddConstructorEntries( void BaseCollectionsAssembler::AddConstructorEntries(
Variant variant, TNode<Context> context, TNode<Context> native_context, Variant variant, TNode<Context> context, TNode<Context> native_context,
TNode<Object> collection, TNode<Object> initial_entries) { TNode<HeapObject> collection, TNode<Object> initial_entries) {
TVARIABLE(BoolT, use_fast_loop, TVARIABLE(BoolT, use_fast_loop,
IsFastJSArrayWithNoCustomIteration(context, initial_entries)); IsFastJSArrayWithNoCustomIteration(context, initial_entries));
TNode<IntPtrT> at_least_space_for = TNode<IntPtrT> at_least_space_for =
...@@ -185,8 +185,8 @@ void BaseCollectionsAssembler::AddConstructorEntries( ...@@ -185,8 +185,8 @@ void BaseCollectionsAssembler::AddConstructorEntries(
TNode<HeapObject> table = AllocateTable(variant, at_least_space_for); TNode<HeapObject> table = AllocateTable(variant, at_least_space_for);
StoreObjectField(collection, GetTableOffset(variant), table); StoreObjectField(collection, GetTableOffset(variant), table);
GotoIf(IsNullOrUndefined(initial_entries), &exit); GotoIf(IsNullOrUndefined(initial_entries), &exit);
GotoIfInitialAddFunctionModified(variant, CAST(native_context), GotoIfInitialAddFunctionModified(variant, CAST(native_context), collection,
CAST(collection), &slow_loop); &slow_loop);
Branch(use_fast_loop.value(), &fast_loop, &slow_loop); Branch(use_fast_loop.value(), &fast_loop, &slow_loop);
} }
BIND(&fast_loop); BIND(&fast_loop);
...@@ -212,7 +212,7 @@ void BaseCollectionsAssembler::AddConstructorEntries( ...@@ -212,7 +212,7 @@ void BaseCollectionsAssembler::AddConstructorEntries(
// Check that add/set function has not been modified. // Check that add/set function has not been modified.
Label if_not_modified(this), if_modified(this); Label if_not_modified(this), if_modified(this);
GotoIfInitialAddFunctionModified(variant, CAST(native_context), GotoIfInitialAddFunctionModified(variant, CAST(native_context),
CAST(collection), &if_modified); collection, &if_modified);
Goto(&if_not_modified); Goto(&if_not_modified);
BIND(&if_modified); BIND(&if_modified);
Unreachable(); Unreachable();
...@@ -728,7 +728,7 @@ class CollectionsBuiltinsAssembler : public BaseCollectionsAssembler { ...@@ -728,7 +728,7 @@ class CollectionsBuiltinsAssembler : public BaseCollectionsAssembler {
// |iterable| is an iterator, it will update the state of the iterator to // |iterable| is an iterator, it will update the state of the iterator to
// 'exhausted'. // 'exhausted'.
TNode<JSArray> SetOrSetIteratorToList(TNode<Context> context, TNode<JSArray> SetOrSetIteratorToList(TNode<Context> context,
TNode<Object> iterable); TNode<HeapObject> iterable);
void BranchIfMapIteratorProtectorValid(Label* if_true, Label* if_false); void BranchIfMapIteratorProtectorValid(Label* if_true, Label* if_false);
void BranchIfSetIteratorProtectorValid(Label* if_true, Label* if_false); void BranchIfSetIteratorProtectorValid(Label* if_true, Label* if_false);
...@@ -826,8 +826,8 @@ TNode<HeapObject> CollectionsBuiltinsAssembler::AllocateJSCollectionIterator( ...@@ -826,8 +826,8 @@ TNode<HeapObject> CollectionsBuiltinsAssembler::AllocateJSCollectionIterator(
const TNode<Object> table = const TNode<Object> table =
LoadObjectField(collection, JSCollection::kTableOffset); LoadObjectField(collection, JSCollection::kTableOffset);
const TNode<NativeContext> native_context = LoadNativeContext(context); const TNode<NativeContext> native_context = LoadNativeContext(context);
const TNode<Object> iterator_map = const TNode<Map> iterator_map =
LoadContextElement(native_context, map_index); CAST(LoadContextElement(native_context, map_index));
const TNode<HeapObject> iterator = const TNode<HeapObject> iterator =
AllocateInNewSpace(IteratorType::kHeaderSize); AllocateInNewSpace(IteratorType::kHeaderSize);
StoreMapNoWriteBarrier(iterator, iterator_map); StoreMapNoWriteBarrier(iterator, iterator_map);
...@@ -1167,17 +1167,17 @@ TF_BUILTIN(MapIteratorToList, CollectionsBuiltinsAssembler) { ...@@ -1167,17 +1167,17 @@ TF_BUILTIN(MapIteratorToList, CollectionsBuiltinsAssembler) {
} }
TNode<JSArray> CollectionsBuiltinsAssembler::SetOrSetIteratorToList( TNode<JSArray> CollectionsBuiltinsAssembler::SetOrSetIteratorToList(
TNode<Context> context, TNode<Object> iterable) { TNode<Context> context, TNode<HeapObject> iterable) {
TVARIABLE(OrderedHashSet, var_table); TVARIABLE(OrderedHashSet, var_table);
Label if_set(this), if_iterator(this), copy(this); Label if_set(this), if_iterator(this), copy(this);
const TNode<Uint16T> instance_type = LoadInstanceType(CAST(iterable)); const TNode<Uint16T> instance_type = LoadInstanceType(iterable);
Branch(InstanceTypeEqual(instance_type, JS_SET_TYPE), &if_set, &if_iterator); Branch(InstanceTypeEqual(instance_type, JS_SET_TYPE), &if_set, &if_iterator);
BIND(&if_set); BIND(&if_set);
{ {
// {iterable} is a JSSet. // {iterable} is a JSSet.
var_table = CAST(LoadObjectField(CAST(iterable), JSSet::kTableOffset)); var_table = CAST(LoadObjectField(iterable, JSSet::kTableOffset));
Goto(&copy); Goto(&copy);
} }
...@@ -1249,7 +1249,7 @@ TNode<JSArray> CollectionsBuiltinsAssembler::SetOrSetIteratorToList( ...@@ -1249,7 +1249,7 @@ TNode<JSArray> CollectionsBuiltinsAssembler::SetOrSetIteratorToList(
TF_BUILTIN(SetOrSetIteratorToList, CollectionsBuiltinsAssembler) { TF_BUILTIN(SetOrSetIteratorToList, CollectionsBuiltinsAssembler) {
TNode<Context> context = CAST(Parameter(Descriptor::kContext)); TNode<Context> context = CAST(Parameter(Descriptor::kContext));
TNode<Object> object = CAST(Parameter(Descriptor::kSource)); TNode<HeapObject> object = CAST(Parameter(Descriptor::kSource));
Return(SetOrSetIteratorToList(context, object)); Return(SetOrSetIteratorToList(context, object));
} }
...@@ -2057,14 +2057,14 @@ TF_BUILTIN(MapPrototypeValues, CollectionsBuiltinsAssembler) { ...@@ -2057,14 +2057,14 @@ TF_BUILTIN(MapPrototypeValues, CollectionsBuiltinsAssembler) {
TF_BUILTIN(MapIteratorPrototypeNext, CollectionsBuiltinsAssembler) { TF_BUILTIN(MapIteratorPrototypeNext, CollectionsBuiltinsAssembler) {
const char* const kMethodName = "Map Iterator.prototype.next"; const char* const kMethodName = "Map Iterator.prototype.next";
const TNode<Object> receiver = CAST(Parameter(Descriptor::kReceiver)); const TNode<Object> maybe_receiver = CAST(Parameter(Descriptor::kReceiver));
const TNode<Context> context = CAST(Parameter(Descriptor::kContext)); const TNode<Context> context = CAST(Parameter(Descriptor::kContext));
// Ensure that the {receiver} is actually a JSMapIterator. // Ensure that {maybe_receiver} is actually a JSMapIterator.
Label if_receiver_valid(this), if_receiver_invalid(this, Label::kDeferred); Label if_receiver_valid(this), if_receiver_invalid(this, Label::kDeferred);
GotoIf(TaggedIsSmi(receiver), &if_receiver_invalid); GotoIf(TaggedIsSmi(maybe_receiver), &if_receiver_invalid);
const TNode<Uint16T> receiver_instance_type = const TNode<Uint16T> receiver_instance_type =
LoadInstanceType(CAST(receiver)); LoadInstanceType(CAST(maybe_receiver));
GotoIf( GotoIf(
InstanceTypeEqual(receiver_instance_type, JS_MAP_KEY_VALUE_ITERATOR_TYPE), InstanceTypeEqual(receiver_instance_type, JS_MAP_KEY_VALUE_ITERATOR_TYPE),
&if_receiver_valid); &if_receiver_valid);
...@@ -2074,8 +2074,9 @@ TF_BUILTIN(MapIteratorPrototypeNext, CollectionsBuiltinsAssembler) { ...@@ -2074,8 +2074,9 @@ TF_BUILTIN(MapIteratorPrototypeNext, CollectionsBuiltinsAssembler) {
&if_receiver_valid, &if_receiver_invalid); &if_receiver_valid, &if_receiver_invalid);
BIND(&if_receiver_invalid); BIND(&if_receiver_invalid);
ThrowTypeError(context, MessageTemplate::kIncompatibleMethodReceiver, ThrowTypeError(context, MessageTemplate::kIncompatibleMethodReceiver,
StringConstant(kMethodName), receiver); StringConstant(kMethodName), maybe_receiver);
BIND(&if_receiver_valid); BIND(&if_receiver_valid);
TNode<JSMapIterator> receiver = CAST(maybe_receiver);
// Check if the {receiver} is exhausted. // Check if the {receiver} is exhausted.
TVARIABLE(Oddball, var_done, TrueConstant()); TVARIABLE(Oddball, var_done, TrueConstant());
...@@ -2087,7 +2088,7 @@ TF_BUILTIN(MapIteratorPrototypeNext, CollectionsBuiltinsAssembler) { ...@@ -2087,7 +2088,7 @@ TF_BUILTIN(MapIteratorPrototypeNext, CollectionsBuiltinsAssembler) {
TNode<OrderedHashMap> table; TNode<OrderedHashMap> table;
TNode<IntPtrT> index; TNode<IntPtrT> index;
std::tie(table, index) = std::tie(table, index) =
TransitionAndUpdate<JSMapIterator, OrderedHashMap>(CAST(receiver)); TransitionAndUpdate<JSMapIterator, OrderedHashMap>(receiver);
// Read the next entry from the {table}, skipping holes. // Read the next entry from the {table}, skipping holes.
TNode<Object> entry_key; TNode<Object> entry_key;
...@@ -2279,14 +2280,14 @@ TF_BUILTIN(SetPrototypeValues, CollectionsBuiltinsAssembler) { ...@@ -2279,14 +2280,14 @@ TF_BUILTIN(SetPrototypeValues, CollectionsBuiltinsAssembler) {
TF_BUILTIN(SetIteratorPrototypeNext, CollectionsBuiltinsAssembler) { TF_BUILTIN(SetIteratorPrototypeNext, CollectionsBuiltinsAssembler) {
const char* const kMethodName = "Set Iterator.prototype.next"; const char* const kMethodName = "Set Iterator.prototype.next";
const TNode<Object> receiver = CAST(Parameter(Descriptor::kReceiver)); const TNode<Object> maybe_receiver = CAST(Parameter(Descriptor::kReceiver));
const TNode<Context> context = CAST(Parameter(Descriptor::kContext)); const TNode<Context> context = CAST(Parameter(Descriptor::kContext));
// Ensure that the {receiver} is actually a JSSetIterator. // Ensure that {maybe_receiver} is actually a JSSetIterator.
Label if_receiver_valid(this), if_receiver_invalid(this, Label::kDeferred); Label if_receiver_valid(this), if_receiver_invalid(this, Label::kDeferred);
GotoIf(TaggedIsSmi(receiver), &if_receiver_invalid); GotoIf(TaggedIsSmi(maybe_receiver), &if_receiver_invalid);
const TNode<Uint16T> receiver_instance_type = const TNode<Uint16T> receiver_instance_type =
LoadInstanceType(CAST(receiver)); LoadInstanceType(CAST(maybe_receiver));
GotoIf(InstanceTypeEqual(receiver_instance_type, JS_SET_VALUE_ITERATOR_TYPE), GotoIf(InstanceTypeEqual(receiver_instance_type, JS_SET_VALUE_ITERATOR_TYPE),
&if_receiver_valid); &if_receiver_valid);
Branch( Branch(
...@@ -2294,9 +2295,11 @@ TF_BUILTIN(SetIteratorPrototypeNext, CollectionsBuiltinsAssembler) { ...@@ -2294,9 +2295,11 @@ TF_BUILTIN(SetIteratorPrototypeNext, CollectionsBuiltinsAssembler) {
&if_receiver_valid, &if_receiver_invalid); &if_receiver_valid, &if_receiver_invalid);
BIND(&if_receiver_invalid); BIND(&if_receiver_invalid);
ThrowTypeError(context, MessageTemplate::kIncompatibleMethodReceiver, ThrowTypeError(context, MessageTemplate::kIncompatibleMethodReceiver,
StringConstant(kMethodName), receiver); StringConstant(kMethodName), maybe_receiver);
BIND(&if_receiver_valid); BIND(&if_receiver_valid);
TNode<JSSetIterator> receiver = CAST(maybe_receiver);
// Check if the {receiver} is exhausted. // Check if the {receiver} is exhausted.
TVARIABLE(Oddball, var_done, TrueConstant()); TVARIABLE(Oddball, var_done, TrueConstant());
TVARIABLE(Object, var_value, UndefinedConstant()); TVARIABLE(Object, var_value, UndefinedConstant());
...@@ -2307,7 +2310,7 @@ TF_BUILTIN(SetIteratorPrototypeNext, CollectionsBuiltinsAssembler) { ...@@ -2307,7 +2310,7 @@ TF_BUILTIN(SetIteratorPrototypeNext, CollectionsBuiltinsAssembler) {
TNode<OrderedHashSet> table; TNode<OrderedHashSet> table;
TNode<IntPtrT> index; TNode<IntPtrT> index;
std::tie(table, index) = std::tie(table, index) =
TransitionAndUpdate<JSSetIterator, OrderedHashSet>(CAST(receiver)); TransitionAndUpdate<JSSetIterator, OrderedHashSet>(receiver);
// Read the next entry from the {table}, skipping holes. // Read the next entry from the {table}, skipping holes.
TNode<Object> entry_key; TNode<Object> entry_key;
......
...@@ -733,8 +733,8 @@ TF_BUILTIN(NumberConstructor, ConstructorBuiltinsAssembler) { ...@@ -733,8 +733,8 @@ TF_BUILTIN(NumberConstructor, ConstructorBuiltinsAssembler) {
// from the current frame here in order to reduce register pressure on the // from the current frame here in order to reduce register pressure on the
// fast path. // fast path.
TNode<JSFunction> target = LoadTargetFromFrame(); TNode<JSFunction> target = LoadTargetFromFrame();
TNode<Object> result = TNode<HeapObject> result = CAST(
CallBuiltin(Builtins::kFastNewObject, context, target, new_target); CallBuiltin(Builtins::kFastNewObject, context, target, new_target));
StoreObjectField(result, JSPrimitiveWrapper::kValueOffset, n_value); StoreObjectField(result, JSPrimitiveWrapper::kValueOffset, n_value);
args.PopAndReturn(result); args.PopAndReturn(result);
} }
......
...@@ -429,8 +429,8 @@ TF_BUILTIN(ToObject, CodeStubAssembler) { ...@@ -429,8 +429,8 @@ TF_BUILTIN(ToObject, CodeStubAssembler) {
TNode<NativeContext> native_context = LoadNativeContext(context); TNode<NativeContext> native_context = LoadNativeContext(context);
TNode<JSFunction> constructor = CAST(LoadContextElement( TNode<JSFunction> constructor = CAST(LoadContextElement(
native_context, constructor_function_index_var.value())); native_context, constructor_function_index_var.value()));
TNode<Object> initial_map = TNode<Map> initial_map = LoadObjectField<Map>(
LoadObjectField(constructor, JSFunction::kPrototypeOrInitialMapOffset); constructor, JSFunction::kPrototypeOrInitialMapOffset);
TNode<HeapObject> js_primitive_wrapper = TNode<HeapObject> js_primitive_wrapper =
Allocate(JSPrimitiveWrapper::kHeaderSize); Allocate(JSPrimitiveWrapper::kHeaderSize);
StoreMapNoWriteBarrier(js_primitive_wrapper, initial_map); StoreMapNoWriteBarrier(js_primitive_wrapper, initial_map);
......
...@@ -30,8 +30,8 @@ TNode<JSPromise> PromiseBuiltinsAssembler::AllocateJSPromise( ...@@ -30,8 +30,8 @@ TNode<JSPromise> PromiseBuiltinsAssembler::AllocateJSPromise(
const TNode<JSFunction> promise_fun = const TNode<JSFunction> promise_fun =
CAST(LoadContextElement(native_context, Context::PROMISE_FUNCTION_INDEX)); CAST(LoadContextElement(native_context, Context::PROMISE_FUNCTION_INDEX));
CSA_ASSERT(this, IsFunctionWithPrototypeSlotMap(LoadMap(promise_fun))); CSA_ASSERT(this, IsFunctionWithPrototypeSlotMap(LoadMap(promise_fun)));
const TNode<Object> promise_map = const TNode<Map> promise_map = LoadObjectField<Map>(
LoadObjectField(promise_fun, JSFunction::kPrototypeOrInitialMapOffset); promise_fun, JSFunction::kPrototypeOrInitialMapOffset);
const TNode<HeapObject> promise = const TNode<HeapObject> promise =
Allocate(JSPromise::kSizeWithEmbedderFields); Allocate(JSPromise::kSizeWithEmbedderFields);
StoreMapNoWriteBarrier(promise, promise_map); StoreMapNoWriteBarrier(promise, promise_map);
......
...@@ -2822,16 +2822,16 @@ void CodeStubAssembler::StoreHeapNumberValue(SloppyTNode<HeapNumber> object, ...@@ -2822,16 +2822,16 @@ void CodeStubAssembler::StoreHeapNumberValue(SloppyTNode<HeapNumber> object,
MachineRepresentation::kFloat64); MachineRepresentation::kFloat64);
} }
void CodeStubAssembler::StoreObjectField(Node* object, int offset, void CodeStubAssembler::StoreObjectField(TNode<HeapObject> object, int offset,
Node* value) { TNode<Object> value) {
DCHECK_NE(HeapObject::kMapOffset, offset); // Use StoreMap instead. DCHECK_NE(HeapObject::kMapOffset, offset); // Use StoreMap instead.
OptimizedStoreField(MachineRepresentation::kTagged, OptimizedStoreField(MachineRepresentation::kTagged,
UncheckedCast<HeapObject>(object), offset, value); UncheckedCast<HeapObject>(object), offset, value);
} }
void CodeStubAssembler::StoreObjectField(Node* object, Node* offset, void CodeStubAssembler::StoreObjectField(TNode<HeapObject> object, Node* offset,
Node* value) { TNode<Object> value) {
int const_offset; int const_offset;
if (ToInt32Constant(offset, &const_offset)) { if (ToInt32Constant(offset, &const_offset)) {
StoreObjectField(object, const_offset, value); StoreObjectField(object, const_offset, value);
...@@ -2872,24 +2872,23 @@ void CodeStubAssembler::StoreMap(TNode<HeapObject> object, TNode<Map> map) { ...@@ -2872,24 +2872,23 @@ void CodeStubAssembler::StoreMap(TNode<HeapObject> object, TNode<Map> map) {
OptimizedStoreMap(object, map); OptimizedStoreMap(object, map);
} }
void CodeStubAssembler::StoreMapNoWriteBarrier(Node* object, void CodeStubAssembler::StoreMapNoWriteBarrier(TNode<HeapObject> object,
RootIndex map_root_index) { RootIndex map_root_index) {
StoreMapNoWriteBarrier(object, LoadRoot(map_root_index)); StoreMapNoWriteBarrier(object, CAST(LoadRoot(map_root_index)));
} }
void CodeStubAssembler::StoreMapNoWriteBarrier(Node* object, Node* map) { void CodeStubAssembler::StoreMapNoWriteBarrier(TNode<HeapObject> object,
CSA_SLOW_ASSERT(this, IsMap(map)); TNode<Map> map) {
OptimizedStoreFieldAssertNoWriteBarrier(MachineRepresentation::kTaggedPointer, OptimizedStoreFieldAssertNoWriteBarrier(MachineRepresentation::kTaggedPointer,
UncheckedCast<HeapObject>(object), object, HeapObject::kMapOffset, map);
HeapObject::kMapOffset, map);
} }
void CodeStubAssembler::StoreObjectFieldRoot(Node* object, int offset, void CodeStubAssembler::StoreObjectFieldRoot(TNode<HeapObject> object,
RootIndex root_index) { int offset, RootIndex root_index) {
if (RootsTable::IsImmortalImmovable(root_index)) { if (RootsTable::IsImmortalImmovable(root_index)) {
return StoreObjectFieldNoWriteBarrier(object, offset, LoadRoot(root_index)); StoreObjectFieldNoWriteBarrier(object, offset, LoadRoot(root_index));
} else { } else {
return StoreObjectField(object, offset, LoadRoot(root_index)); StoreObjectField(object, offset, LoadRoot(root_index));
} }
} }
...@@ -5028,7 +5027,7 @@ TNode<FixedArrayBase> CodeStubAssembler::GrowElementsCapacity( ...@@ -5028,7 +5027,7 @@ TNode<FixedArrayBase> CodeStubAssembler::GrowElementsCapacity(
CopyFixedArrayElements(from_kind, elements, to_kind, new_elements, capacity, CopyFixedArrayElements(from_kind, elements, to_kind, new_elements, capacity,
new_capacity, SKIP_WRITE_BARRIER, mode); new_capacity, SKIP_WRITE_BARRIER, mode);
StoreObjectField(object, JSObject::kElementsOffset, new_elements); StoreObjectField(CAST(object), JSObject::kElementsOffset, new_elements);
Comment("] GrowElementsCapacity"); Comment("] GrowElementsCapacity");
return new_elements; return new_elements;
} }
...@@ -12441,8 +12440,8 @@ TNode<JSObject> CodeStubAssembler::AllocateJSIteratorResult( ...@@ -12441,8 +12440,8 @@ TNode<JSObject> CodeStubAssembler::AllocateJSIteratorResult(
SloppyTNode<Oddball> done) { SloppyTNode<Oddball> done) {
CSA_ASSERT(this, IsBoolean(done)); CSA_ASSERT(this, IsBoolean(done));
TNode<NativeContext> native_context = LoadNativeContext(context); TNode<NativeContext> native_context = LoadNativeContext(context);
TNode<Object> map = TNode<Map> map = CAST(
LoadContextElement(native_context, Context::ITERATOR_RESULT_MAP_INDEX); LoadContextElement(native_context, Context::ITERATOR_RESULT_MAP_INDEX));
TNode<HeapObject> result = Allocate(JSIteratorResult::kSize); TNode<HeapObject> result = Allocate(JSIteratorResult::kSize);
StoreMapNoWriteBarrier(result, map); StoreMapNoWriteBarrier(result, map);
StoreObjectFieldRoot(result, JSIteratorResult::kPropertiesOrHashOffset, StoreObjectFieldRoot(result, JSIteratorResult::kPropertiesOrHashOffset,
...@@ -12466,16 +12465,16 @@ TNode<JSObject> CodeStubAssembler::AllocateJSIteratorResultForEntry( ...@@ -12466,16 +12465,16 @@ TNode<JSObject> CodeStubAssembler::AllocateJSIteratorResultForEntry(
StoreObjectFieldNoWriteBarrier(elements, FixedArray::kLengthOffset, length); StoreObjectFieldNoWriteBarrier(elements, FixedArray::kLengthOffset, length);
StoreFixedArrayElement(elements, 0, key); StoreFixedArrayElement(elements, 0, key);
StoreFixedArrayElement(elements, 1, value); StoreFixedArrayElement(elements, 1, value);
TNode<Object> array_map = LoadContextElement( TNode<Map> array_map = CAST(LoadContextElement(
native_context, Context::JS_ARRAY_PACKED_ELEMENTS_MAP_INDEX); native_context, Context::JS_ARRAY_PACKED_ELEMENTS_MAP_INDEX));
TNode<HeapObject> array = InnerAllocate(elements, elements_size); TNode<HeapObject> array = InnerAllocate(elements, elements_size);
StoreMapNoWriteBarrier(array, array_map); StoreMapNoWriteBarrier(array, array_map);
StoreObjectFieldRoot(array, JSArray::kPropertiesOrHashOffset, StoreObjectFieldRoot(array, JSArray::kPropertiesOrHashOffset,
RootIndex::kEmptyFixedArray); RootIndex::kEmptyFixedArray);
StoreObjectFieldNoWriteBarrier(array, JSArray::kElementsOffset, elements); StoreObjectFieldNoWriteBarrier(array, JSArray::kElementsOffset, elements);
StoreObjectFieldNoWriteBarrier(array, JSArray::kLengthOffset, length); StoreObjectFieldNoWriteBarrier(array, JSArray::kLengthOffset, length);
TNode<Object> iterator_map = TNode<Map> iterator_map = CAST(
LoadContextElement(native_context, Context::ITERATOR_RESULT_MAP_INDEX); LoadContextElement(native_context, Context::ITERATOR_RESULT_MAP_INDEX));
TNode<HeapObject> result = InnerAllocate(array, JSArray::kHeaderSize); TNode<HeapObject> result = InnerAllocate(array, JSArray::kHeaderSize);
StoreMapNoWriteBarrier(result, iterator_map); StoreMapNoWriteBarrier(result, iterator_map);
StoreObjectFieldRoot(result, JSIteratorResult::kPropertiesOrHashOffset, StoreObjectFieldRoot(result, JSIteratorResult::kPropertiesOrHashOffset,
......
...@@ -1536,8 +1536,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler ...@@ -1536,8 +1536,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
void StoreHeapNumberValue(SloppyTNode<HeapNumber> object, void StoreHeapNumberValue(SloppyTNode<HeapNumber> object,
SloppyTNode<Float64T> value); SloppyTNode<Float64T> value);
// Store a field to an object on the heap. // Store a field to an object on the heap.
void StoreObjectField(Node* object, int offset, Node* value); void StoreObjectField(TNode<HeapObject> object, int offset,
void StoreObjectField(Node* object, Node* offset, Node* value); TNode<Object> value);
void StoreObjectField(TNode<HeapObject> object, Node* offset,
TNode<Object> value);
void StoreObjectFieldNoWriteBarrier( void StoreObjectFieldNoWriteBarrier(
Node* object, int offset, Node* value, Node* object, int offset, Node* value,
MachineRepresentation rep = MachineRepresentation::kTagged); MachineRepresentation rep = MachineRepresentation::kTagged);
...@@ -1562,9 +1564,11 @@ class V8_EXPORT_PRIVATE CodeStubAssembler ...@@ -1562,9 +1564,11 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
// Store the Map of an HeapObject. // Store the Map of an HeapObject.
void StoreMap(TNode<HeapObject> object, TNode<Map> map); void StoreMap(TNode<HeapObject> object, TNode<Map> map);
void StoreMapNoWriteBarrier(Node* object, RootIndex map_root_index); void StoreMapNoWriteBarrier(TNode<HeapObject> object,
void StoreMapNoWriteBarrier(Node* object, Node* map); RootIndex map_root_index);
void StoreObjectFieldRoot(Node* object, int offset, RootIndex root); void StoreMapNoWriteBarrier(TNode<HeapObject> object, TNode<Map> map);
void StoreObjectFieldRoot(TNode<HeapObject> object, int offset,
RootIndex root);
// Store an array element to a FixedArray. // Store an array element to a FixedArray.
void StoreFixedArrayElement( void StoreFixedArrayElement(
TNode<FixedArray> object, int index, SloppyTNode<Object> value, TNode<FixedArray> object, int index, SloppyTNode<Object> value,
......
...@@ -795,7 +795,8 @@ IGNITION_HANDLER(StaModuleVariable, InterpreterAssembler) { ...@@ -795,7 +795,8 @@ IGNITION_HANDLER(StaModuleVariable, InterpreterAssembler) {
module, SourceTextModule::kRegularExportsOffset); module, SourceTextModule::kRegularExportsOffset);
// The actual array index is (cell_index - 1). // The actual array index is (cell_index - 1).
TNode<IntPtrT> export_index = IntPtrSub(cell_index, IntPtrConstant(1)); TNode<IntPtrT> export_index = IntPtrSub(cell_index, IntPtrConstant(1));
TNode<Object> cell = LoadFixedArrayElement(regular_exports, export_index); TNode<HeapObject> cell =
CAST(LoadFixedArrayElement(regular_exports, export_index));
StoreObjectField(cell, Cell::kValueOffset, value); StoreObjectField(cell, Cell::kValueOffset, value);
Goto(&end); Goto(&end);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment