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

Unified Diff: src/code-stubs.cc

Issue 2504913002: Revert of [refactoring] Split CodeAssemblerState out of CodeAssembler (Closed)
Patch Set: Created 4 years, 1 month 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-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stubs.cc
diff --git a/src/code-stubs.cc b/src/code-stubs.cc
index 8a0ca9d296e00f19c3f78e0df7aae7946f166bef..2ee5ece8da6368f49b7e73073e8d5231b6e08de5 100644
--- a/src/code-stubs.cc
+++ b/src/code-stubs.cc
@@ -322,38 +322,36 @@
os << "StringAddStub_" << flags() << "_" << pretenure_flag();
}
-void StringAddStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* left = assembler.Parameter(Descriptor::kLeft);
- Node* right = assembler.Parameter(Descriptor::kRight);
- Node* context = assembler.Parameter(Descriptor::kContext);
+void StringAddStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* left = assembler->Parameter(Descriptor::kLeft);
+ Node* right = assembler->Parameter(Descriptor::kRight);
+ Node* context = assembler->Parameter(Descriptor::kContext);
if ((flags() & STRING_ADD_CHECK_LEFT) != 0) {
DCHECK((flags() & STRING_ADD_CONVERT) != 0);
// TODO(danno): The ToString and JSReceiverToPrimitive below could be
// combined to avoid duplicate smi and instance type checks.
- left = assembler.ToString(context,
- assembler.JSReceiverToPrimitive(context, left));
+ left = assembler->ToString(context,
+ assembler->JSReceiverToPrimitive(context, left));
}
if ((flags() & STRING_ADD_CHECK_RIGHT) != 0) {
DCHECK((flags() & STRING_ADD_CONVERT) != 0);
// TODO(danno): The ToString and JSReceiverToPrimitive below could be
// combined to avoid duplicate smi and instance type checks.
- right = assembler.ToString(context,
- assembler.JSReceiverToPrimitive(context, right));
+ right = assembler->ToString(
+ context, assembler->JSReceiverToPrimitive(context, right));
}
if ((flags() & STRING_ADD_CHECK_BOTH) == 0) {
CodeStubAssembler::AllocationFlag flags =
(pretenure_flag() == TENURED) ? CodeStubAssembler::kPretenured
: CodeStubAssembler::kNone;
- assembler.Return(assembler.StringAdd(context, left, right, flags));
+ assembler->Return(assembler->StringAdd(context, left, right, flags));
} else {
Callable callable = CodeFactory::StringAdd(isolate(), STRING_ADD_CHECK_NONE,
pretenure_flag());
- assembler.TailCallStub(callable, context, left, right);
+ assembler->TailCallStub(callable, context, left, right);
}
}
@@ -424,338 +422,299 @@
const char* name = CodeStub::MajorName(MajorKey());
Zone zone(isolate()->allocator(), ZONE_NAME);
CallInterfaceDescriptor descriptor(GetCallInterfaceDescriptor());
- compiler::CodeAssemblerState state(isolate(), &zone, descriptor,
- GetCodeFlags(), name);
- GenerateAssembly(&state);
- return compiler::CodeAssembler::GenerateCode(&state);
+ CodeStubAssembler assembler(isolate(), &zone, descriptor, GetCodeFlags(),
+ name);
+ GenerateAssembly(&assembler);
+ return assembler.GenerateCode();
}
void LoadICTrampolineStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Node* vector = assembler.LoadTypeFeedbackVectorForStub();
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Node* vector = assembler->LoadTypeFeedbackVectorForStub();
CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
- assembler.LoadIC(&p);
-}
-
-void LoadICStub::GenerateAssembly(compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ assembler->LoadIC(&p);
+}
+
+void LoadICStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
- assembler.LoadIC(&p);
+ assembler->LoadIC(&p);
}
void LoadICProtoArrayStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* handler = assembler.Parameter(Descriptor::kHandler);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* handler = assembler->Parameter(Descriptor::kHandler);
+ Node* context = assembler->Parameter(Descriptor::kContext);
CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
- assembler.LoadICProtoArray(&p, handler);
+ assembler->LoadICProtoArray(&p, handler);
}
void LoadGlobalICTrampolineStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Node* vector = assembler.LoadTypeFeedbackVectorForStub();
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Node* vector = assembler->LoadTypeFeedbackVectorForStub();
CodeStubAssembler::LoadICParameters p(context, nullptr, nullptr, slot,
vector);
- assembler.LoadGlobalIC(&p);
-}
-
-void LoadGlobalICStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ assembler->LoadGlobalIC(&p);
+}
+
+void LoadGlobalICStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
CodeStubAssembler::LoadICParameters p(context, nullptr, nullptr, slot,
vector);
- assembler.LoadGlobalIC(&p);
+ assembler->LoadGlobalIC(&p);
}
void KeyedLoadICTrampolineTFStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Node* vector = assembler.LoadTypeFeedbackVectorForStub();
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Node* vector = assembler->LoadTypeFeedbackVectorForStub();
CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
- assembler.KeyedLoadIC(&p);
-}
-
-void KeyedLoadICTFStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ assembler->KeyedLoadIC(&p);
+}
+
+void KeyedLoadICTFStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
- assembler.KeyedLoadIC(&p);
+ assembler->KeyedLoadIC(&p);
}
void StoreICTrampolineStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Node* vector = assembler.LoadTypeFeedbackVectorForStub();
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Node* vector = assembler->LoadTypeFeedbackVectorForStub();
CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
vector);
- assembler.StoreIC(&p);
-}
-
-void StoreICStub::GenerateAssembly(compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ assembler->StoreIC(&p);
+}
+
+void StoreICStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
vector);
- assembler.StoreIC(&p);
+ assembler->StoreIC(&p);
}
void KeyedStoreICTrampolineTFStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Node* vector = assembler.LoadTypeFeedbackVectorForStub();
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Node* vector = assembler->LoadTypeFeedbackVectorForStub();
CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
vector);
- assembler.KeyedStoreIC(&p, StoreICState::GetLanguageMode(GetExtraICState()));
-}
-
-void KeyedStoreICTFStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ assembler->KeyedStoreIC(&p, StoreICState::GetLanguageMode(GetExtraICState()));
+}
+
+void KeyedStoreICTFStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
vector);
- assembler.KeyedStoreIC(&p, StoreICState::GetLanguageMode(GetExtraICState()));
-}
-
-void StoreMapStub::GenerateAssembly(compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* map = assembler.Parameter(Descriptor::kMap);
- Node* value = assembler.Parameter(Descriptor::kValue);
-
- assembler.StoreObjectField(receiver, JSObject::kMapOffset, map);
- assembler.Return(value);
-}
-
-void StoreTransitionStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ assembler->KeyedStoreIC(&p, StoreICState::GetLanguageMode(GetExtraICState()));
+}
+
+void StoreMapStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* map = assembler->Parameter(Descriptor::kMap);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+
+ assembler->StoreObjectField(receiver, JSObject::kMapOffset, map);
+ assembler->Return(value);
+}
+
+void StoreTransitionStub::GenerateAssembly(CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
Node* offset =
- assembler.SmiUntag(assembler.Parameter(Descriptor::kFieldOffset));
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* map = assembler.Parameter(Descriptor::kMap);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label miss(&assembler);
+ assembler->SmiUntag(assembler->Parameter(Descriptor::kFieldOffset));
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* map = assembler->Parameter(Descriptor::kMap);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label miss(assembler);
Representation representation = this->representation();
- assembler.Comment("StoreTransitionStub: is_inobject: %d: representation: %s",
- is_inobject(), representation.Mnemonic());
+ assembler->Comment("StoreTransitionStub: is_inobject: %d: representation: %s",
+ is_inobject(), representation.Mnemonic());
Node* prepared_value =
- assembler.PrepareValueForWrite(value, representation, &miss);
+ assembler->PrepareValueForWrite(value, representation, &miss);
if (store_mode() == StoreTransitionStub::ExtendStorageAndStoreMapAndValue) {
- assembler.Comment("Extend storage");
- assembler.ExtendPropertiesBackingStore(receiver);
+ assembler->Comment("Extend storage");
+ assembler->ExtendPropertiesBackingStore(receiver);
} else {
DCHECK(store_mode() == StoreTransitionStub::StoreMapAndValue);
}
// Store the new value into the "extended" object.
- assembler.Comment("Store value");
- assembler.StoreNamedField(receiver, offset, is_inobject(), representation,
- prepared_value, true);
+ assembler->Comment("Store value");
+ assembler->StoreNamedField(receiver, offset, is_inobject(), representation,
+ prepared_value, true);
// And finally update the map.
- assembler.Comment("Store map");
- assembler.StoreObjectField(receiver, JSObject::kMapOffset, map);
- assembler.Return(value);
+ assembler->Comment("Store map");
+ assembler->StoreObjectField(receiver, JSObject::kMapOffset, map);
+ assembler->Return(value);
// Only store to tagged field never bails out.
if (!representation.IsTagged()) {
- assembler.Bind(&miss);
+ assembler->Bind(&miss);
{
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
- vector, receiver, name);
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
+ vector, receiver, name);
}
}
}
void ElementsTransitionAndStoreStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* key = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* map = assembler.Parameter(Descriptor::kMap);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- assembler.Comment(
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* key = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* map = assembler->Parameter(Descriptor::kMap);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ assembler->Comment(
"ElementsTransitionAndStoreStub: from_kind=%s, to_kind=%s,"
" is_jsarray=%d, store_mode=%d",
ElementsKindToString(from_kind()), ElementsKindToString(to_kind()),
is_jsarray(), store_mode());
- Label miss(&assembler);
+ Label miss(assembler);
if (FLAG_trace_elements_transitions) {
// Tracing elements transitions is the job of the runtime.
- assembler.Goto(&miss);
+ assembler->Goto(&miss);
} else {
- assembler.TransitionElementsKind(receiver, map, from_kind(), to_kind(),
- is_jsarray(), &miss);
- assembler.EmitElementStore(receiver, key, value, is_jsarray(), to_kind(),
- store_mode(), &miss);
- assembler.Return(value);
- }
-
- assembler.Bind(&miss);
- {
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kElementsTransitionAndStoreIC_Miss,
- context, receiver, key, value, map, slot, vector);
+ assembler->TransitionElementsKind(receiver, map, from_kind(), to_kind(),
+ is_jsarray(), &miss);
+ assembler->EmitElementStore(receiver, key, value, is_jsarray(), to_kind(),
+ store_mode(), &miss);
+ assembler->Return(value);
+ }
+
+ assembler->Bind(&miss);
+ {
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kElementsTransitionAndStoreIC_Miss,
+ context, receiver, key, value, map, slot,
+ vector);
}
}
void AllocateHeapNumberStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* result = assembler.AllocateHeapNumber();
- assembler.Return(result);
-}
-
-#define SIMD128_GEN_ASM(TYPE, Type, type, lane_count, lane_type) \
- void Allocate##Type##Stub::GenerateAssembly( \
- compiler::CodeAssemblerState* state) const { \
- CodeStubAssembler assembler(state); \
- compiler::Node* result = \
- assembler.Allocate(Simd128Value::kSize, CodeStubAssembler::kNone); \
- compiler::Node* map = assembler.LoadMap(result); \
- assembler.StoreNoWriteBarrier( \
- MachineRepresentation::kTagged, map, \
- assembler.HeapConstant(isolate()->factory()->type##_map())); \
- assembler.Return(result); \
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* result = assembler->AllocateHeapNumber();
+ assembler->Return(result);
+}
+
+#define SIMD128_GEN_ASM(TYPE, Type, type, lane_count, lane_type) \
+ void Allocate##Type##Stub::GenerateAssembly(CodeStubAssembler* assembler) \
+ const { \
+ compiler::Node* result = \
+ assembler->Allocate(Simd128Value::kSize, CodeStubAssembler::kNone); \
+ compiler::Node* map = assembler->LoadMap(result); \
+ assembler->StoreNoWriteBarrier( \
+ MachineRepresentation::kTagged, map, \
+ assembler->HeapConstant(isolate()->factory()->type##_map())); \
+ assembler->Return(result); \
}
SIMD128_TYPES(SIMD128_GEN_ASM)
#undef SIMD128_GEN_ASM
-void StringLengthStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- CodeStubAssembler assembler(state);
- compiler::Node* value = assembler.Parameter(0);
- compiler::Node* string = assembler.LoadJSValueValue(value);
- compiler::Node* result = assembler.LoadStringLength(string);
- assembler.Return(result);
-}
-
-#define BINARY_OP_STUB(Name) \
- void Name::GenerateAssembly(compiler::CodeAssemblerState* state) const { \
- typedef BinaryOpWithVectorDescriptor Descriptor; \
- CodeStubAssembler assembler(state); \
- assembler.Return(Generate(&assembler, \
- assembler.Parameter(Descriptor::kLeft), \
- assembler.Parameter(Descriptor::kRight), \
- assembler.Parameter(Descriptor::kSlot), \
- assembler.Parameter(Descriptor::kVector), \
- assembler.Parameter(Descriptor::kContext))); \
- }
-BINARY_OP_STUB(AddWithFeedbackStub)
-BINARY_OP_STUB(SubtractWithFeedbackStub)
-BINARY_OP_STUB(MultiplyWithFeedbackStub)
-BINARY_OP_STUB(DivideWithFeedbackStub)
-BINARY_OP_STUB(ModulusWithFeedbackStub)
-#undef BINARY_OP_STUB
+void StringLengthStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ compiler::Node* value = assembler->Parameter(0);
+ compiler::Node* string = assembler->LoadJSValueValue(value);
+ compiler::Node* result = assembler->LoadStringLength(string);
+ assembler->Return(result);
+}
// static
compiler::Node* AddWithFeedbackStub::Generate(
@@ -1707,17 +1666,6 @@
return var_result.value();
}
-#define UNARY_OP_STUB(Name) \
- void Name::GenerateAssembly(compiler::CodeAssemblerState* state) const { \
- CodeStubAssembler assembler(state); \
- assembler.Return(Generate(&assembler, assembler.Parameter(0), \
- assembler.Parameter(1), assembler.Parameter(2), \
- assembler.Parameter(3))); \
- }
-UNARY_OP_STUB(IncStub)
-UNARY_OP_STUB(DecStub)
-#undef UNARY_OP_STUB
-
// static
compiler::Node* IncStub::Generate(CodeStubAssembler* assembler,
compiler::Node* value,
@@ -1851,13 +1799,11 @@
return result_var.value();
}
-void NumberToStringStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* argument = assembler.Parameter(Descriptor::kArgument);
- Node* context = assembler.Parameter(Descriptor::kContext);
- assembler.Return(assembler.NumberToString(context, argument));
+void NumberToStringStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* argument = assembler->Parameter(Descriptor::kArgument);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ assembler->Return(assembler->NumberToString(context, argument));
}
// static
@@ -2002,126 +1948,110 @@
return assembler->SubString(context, string, from, to);
}
-void SubStringStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- CodeStubAssembler assembler(state);
- assembler.Return(Generate(&assembler,
- assembler.Parameter(Descriptor::kString),
- assembler.Parameter(Descriptor::kFrom),
- assembler.Parameter(Descriptor::kTo),
- assembler.Parameter(Descriptor::kContext)));
-}
-
-void LoadApiGetterStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
+void LoadApiGetterStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
// For now we only support receiver_is_holder.
DCHECK(receiver_is_holder());
Node* holder = receiver;
- Node* map = assembler.LoadMap(receiver);
- Node* descriptors = assembler.LoadMapDescriptors(map);
+ Node* map = assembler->LoadMap(receiver);
+ Node* descriptors = assembler->LoadMapDescriptors(map);
Node* value_index =
- assembler.IntPtrConstant(DescriptorArray::ToValueIndex(index()));
- Node* callback = assembler.LoadFixedArrayElement(
+ assembler->IntPtrConstant(DescriptorArray::ToValueIndex(index()));
+ Node* callback = assembler->LoadFixedArrayElement(
descriptors, value_index, 0, CodeStubAssembler::INTPTR_PARAMETERS);
- assembler.TailCallStub(CodeFactory::ApiGetter(isolate()), context, receiver,
- holder, callback);
-}
-
-void StoreFieldStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ assembler->TailCallStub(CodeFactory::ApiGetter(isolate()), context, receiver,
+ holder, callback);
+}
+
+void StoreFieldStub::GenerateAssembly(CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
FieldIndex index = this->index();
Representation representation = this->representation();
- assembler.Comment("StoreFieldStub: inobject=%d, offset=%d, rep=%s",
- index.is_inobject(), index.offset(),
- representation.Mnemonic());
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label miss(&assembler);
+ assembler->Comment("StoreFieldStub: inobject=%d, offset=%d, rep=%s",
+ index.is_inobject(), index.offset(),
+ representation.Mnemonic());
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label miss(assembler);
Node* prepared_value =
- assembler.PrepareValueForWrite(value, representation, &miss);
- assembler.StoreNamedField(receiver, index, representation, prepared_value,
- false);
- assembler.Return(value);
+ assembler->PrepareValueForWrite(value, representation, &miss);
+ assembler->StoreNamedField(receiver, index, representation, prepared_value,
+ false);
+ assembler->Return(value);
// Only stores to tagged field can't bailout.
if (!representation.IsTagged()) {
- assembler.Bind(&miss);
+ assembler->Bind(&miss);
{
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
- vector, receiver, name);
- }
- }
-}
-
-void StoreGlobalStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
+ vector, receiver, name);
+ }
+ }
+}
+
+void StoreGlobalStub::GenerateAssembly(CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- assembler.Comment(
+
+ assembler->Comment(
"StoreGlobalStub: cell_type=%d, constant_type=%d, check_global=%d",
cell_type(), PropertyCellType::kConstantType == cell_type()
? static_cast<int>(constant_type())
: -1,
check_global());
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label miss(&assembler);
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label miss(assembler);
if (check_global()) {
// Check that the map of the global has not changed: use a placeholder map
// that will be replaced later with the global object's map.
- Node* proxy_map = assembler.LoadMap(receiver);
- Node* global = assembler.LoadObjectField(proxy_map, Map::kPrototypeOffset);
- Node* map_cell = assembler.HeapConstant(isolate()->factory()->NewWeakCell(
+ Node* proxy_map = assembler->LoadMap(receiver);
+ Node* global = assembler->LoadObjectField(proxy_map, Map::kPrototypeOffset);
+ Node* map_cell = assembler->HeapConstant(isolate()->factory()->NewWeakCell(
StoreGlobalStub::global_map_placeholder(isolate())));
- Node* expected_map = assembler.LoadWeakCellValueUnchecked(map_cell);
- Node* map = assembler.LoadMap(global);
- assembler.GotoIf(assembler.WordNotEqual(expected_map, map), &miss);
- }
-
- Node* weak_cell = assembler.HeapConstant(isolate()->factory()->NewWeakCell(
+ Node* expected_map = assembler->LoadWeakCellValueUnchecked(map_cell);
+ Node* map = assembler->LoadMap(global);
+ assembler->GotoIf(assembler->WordNotEqual(expected_map, map), &miss);
+ }
+
+ Node* weak_cell = assembler->HeapConstant(isolate()->factory()->NewWeakCell(
StoreGlobalStub::property_cell_placeholder(isolate())));
- Node* cell = assembler.LoadWeakCellValue(weak_cell);
- assembler.GotoIf(assembler.TaggedIsSmi(cell), &miss);
+ Node* cell = assembler->LoadWeakCellValue(weak_cell);
+ assembler->GotoIf(assembler->TaggedIsSmi(cell), &miss);
// Load the payload of the global parameter cell. A hole indicates that the
// cell has been invalidated and that the store must be handled by the
// runtime.
Node* cell_contents =
- assembler.LoadObjectField(cell, PropertyCell::kValueOffset);
+ assembler->LoadObjectField(cell, PropertyCell::kValueOffset);
PropertyCellType cell_type = this->cell_type();
if (cell_type == PropertyCellType::kConstant ||
cell_type == PropertyCellType::kUndefined) {
// This is always valid for all states a cell can be in.
- assembler.GotoIf(assembler.WordNotEqual(cell_contents, value), &miss);
+ assembler->GotoIf(assembler->WordNotEqual(cell_contents, value), &miss);
} else {
- assembler.GotoIf(assembler.IsTheHole(cell_contents), &miss);
+ assembler->GotoIf(assembler->IsTheHole(cell_contents), &miss);
// When dealing with constant types, the type may be allowed to change, as
// long as optimized code remains valid.
@@ -2129,7 +2059,7 @@
if (cell_type == PropertyCellType::kConstantType) {
switch (constant_type()) {
case PropertyCellConstantType::kSmi:
- assembler.GotoUnless(assembler.TaggedIsSmi(value), &miss);
+ assembler->GotoUnless(assembler->TaggedIsSmi(value), &miss);
value_is_smi = true;
break;
case PropertyCellConstantType::kStableMap: {
@@ -2138,154 +2068,148 @@
// are the maps that were originally in the cell or not. If optimized
// code will deopt when a cell has a unstable map and if it has a
// dependency on a stable map, it will deopt if the map destabilizes.
- assembler.GotoIf(assembler.TaggedIsSmi(value), &miss);
- assembler.GotoIf(assembler.TaggedIsSmi(cell_contents), &miss);
- Node* expected_map = assembler.LoadMap(cell_contents);
- Node* map = assembler.LoadMap(value);
- assembler.GotoIf(assembler.WordNotEqual(expected_map, map), &miss);
+ assembler->GotoIf(assembler->TaggedIsSmi(value), &miss);
+ assembler->GotoIf(assembler->TaggedIsSmi(cell_contents), &miss);
+ Node* expected_map = assembler->LoadMap(cell_contents);
+ Node* map = assembler->LoadMap(value);
+ assembler->GotoIf(assembler->WordNotEqual(expected_map, map), &miss);
break;
}
}
}
if (value_is_smi) {
- assembler.StoreObjectFieldNoWriteBarrier(cell, PropertyCell::kValueOffset,
- value);
+ assembler->StoreObjectFieldNoWriteBarrier(
+ cell, PropertyCell::kValueOffset, value);
} else {
- assembler.StoreObjectField(cell, PropertyCell::kValueOffset, value);
- }
- }
-
- assembler.Return(value);
-
- assembler.Bind(&miss);
- {
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
- vector, receiver, name);
+ assembler->StoreObjectField(cell, PropertyCell::kValueOffset, value);
+ }
+ }
+
+ assembler->Return(value);
+
+ assembler->Bind(&miss);
+ {
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot,
+ vector, receiver, name);
}
}
void KeyedLoadSloppyArgumentsStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* key = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label miss(&assembler);
-
- Node* result = assembler.LoadKeyedSloppyArguments(receiver, key, &miss);
- assembler.Return(result);
-
- assembler.Bind(&miss);
- {
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kKeyedLoadIC_Miss, context, receiver,
- key, slot, vector);
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* key = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label miss(assembler);
+
+ Node* result = assembler->LoadKeyedSloppyArguments(receiver, key, &miss);
+ assembler->Return(result);
+
+ assembler->Bind(&miss);
+ {
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kKeyedLoadIC_Miss, context, receiver,
+ key, slot, vector);
}
}
void KeyedStoreSloppyArgumentsStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* key = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label miss(&assembler);
-
- assembler.StoreKeyedSloppyArguments(receiver, key, value, &miss);
- assembler.Return(value);
-
- assembler.Bind(&miss);
- {
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kKeyedStoreIC_Miss, context, value, slot,
- vector, receiver, key);
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* key = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label miss(assembler);
+
+ assembler->StoreKeyedSloppyArguments(receiver, key, value, &miss);
+ assembler->Return(value);
+
+ assembler->Bind(&miss);
+ {
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kKeyedStoreIC_Miss, context, value,
+ slot, vector, receiver, key);
}
}
void LoadScriptContextFieldStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- assembler.Comment("LoadScriptContextFieldStub: context_index=%d, slot=%d",
- context_index(), slot_index());
-
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Node* script_context = assembler.LoadScriptContext(context, context_index());
- Node* result = assembler.LoadFixedArrayElement(
- script_context, assembler.IntPtrConstant(slot_index()), 0,
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ assembler->Comment("LoadScriptContextFieldStub: context_index=%d, slot=%d",
+ context_index(), slot_index());
+
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Node* script_context = assembler->LoadScriptContext(context, context_index());
+ Node* result = assembler->LoadFixedArrayElement(
+ script_context, assembler->IntPtrConstant(slot_index()), 0,
CodeStubAssembler::INTPTR_PARAMETERS);
- assembler.Return(result);
+ assembler->Return(result);
}
void StoreScriptContextFieldStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- assembler.Comment("StoreScriptContextFieldStub: context_index=%d, slot=%d",
- context_index(), slot_index());
-
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Node* script_context = assembler.LoadScriptContext(context, context_index());
- assembler.StoreFixedArrayElement(
- script_context, assembler.IntPtrConstant(slot_index()), value,
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ assembler->Comment("StoreScriptContextFieldStub: context_index=%d, slot=%d",
+ context_index(), slot_index());
+
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Node* script_context = assembler->LoadScriptContext(context, context_index());
+ assembler->StoreFixedArrayElement(
+ script_context, assembler->IntPtrConstant(slot_index()), value,
UPDATE_WRITE_BARRIER, CodeStubAssembler::INTPTR_PARAMETERS);
- assembler.Return(value);
+ assembler->Return(value);
}
void StoreInterceptorStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* name = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* context = assembler.Parameter(Descriptor::kContext);
- assembler.TailCallRuntime(Runtime::kStorePropertyWithInterceptor, context,
- receiver, name, value);
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* name = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ assembler->TailCallRuntime(Runtime::kStorePropertyWithInterceptor, context,
+ receiver, name, value);
}
void LoadIndexedInterceptorStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef compiler::Node Node;
typedef CodeStubAssembler::Label Label;
- CodeStubAssembler assembler(state);
-
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* key = assembler.Parameter(Descriptor::kName);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label if_keyispositivesmi(&assembler), if_keyisinvalid(&assembler);
- assembler.Branch(assembler.WordIsPositiveSmi(key), &if_keyispositivesmi,
- &if_keyisinvalid);
- assembler.Bind(&if_keyispositivesmi);
- assembler.TailCallRuntime(Runtime::kLoadElementWithInterceptor, context,
- receiver, key);
-
- assembler.Bind(&if_keyisinvalid);
- assembler.TailCallRuntime(Runtime::kKeyedLoadIC_Miss, context, receiver, key,
- slot, vector);
+
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* key = assembler->Parameter(Descriptor::kName);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label if_keyispositivesmi(assembler), if_keyisinvalid(assembler);
+ assembler->Branch(assembler->WordIsPositiveSmi(key), &if_keyispositivesmi,
+ &if_keyisinvalid);
+ assembler->Bind(&if_keyispositivesmi);
+ assembler->TailCallRuntime(Runtime::kLoadElementWithInterceptor, context,
+ receiver, key);
+
+ assembler->Bind(&if_keyisinvalid);
+ assembler->TailCallRuntime(Runtime::kKeyedLoadIC_Miss, context, receiver, key,
+ slot, vector);
}
// static
@@ -2392,27 +2316,25 @@
}
void FastCloneShallowObjectStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- Label call_runtime(&assembler);
- Node* closure = assembler.Parameter(0);
- Node* literals_index = assembler.Parameter(1);
+ Label call_runtime(assembler);
+ Node* closure = assembler->Parameter(0);
+ Node* literals_index = assembler->Parameter(1);
Node* properties_count =
- assembler.IntPtrConstant(PropertiesCount(this->length()));
- Node* copy = GenerateFastPath(&assembler, &call_runtime, closure,
+ assembler->IntPtrConstant(PropertiesCount(this->length()));
+ Node* copy = GenerateFastPath(assembler, &call_runtime, closure,
literals_index, properties_count);
- assembler.Return(copy);
-
- assembler.Bind(&call_runtime);
- Node* constant_properties = assembler.Parameter(2);
- Node* flags = assembler.Parameter(3);
- Node* context = assembler.Parameter(4);
- assembler.TailCallRuntime(Runtime::kCreateObjectLiteral, context, closure,
- literals_index, constant_properties, flags);
+ assembler->Return(copy);
+
+ assembler->Bind(&call_runtime);
+ Node* constant_properties = assembler->Parameter(2);
+ Node* flags = assembler->Parameter(3);
+ Node* context = assembler->Parameter(4);
+ assembler->TailCallRuntime(Runtime::kCreateObjectLiteral, context, closure,
+ literals_index, constant_properties, flags);
}
template<class StateType>
@@ -2505,67 +2427,65 @@
FUNCTION_ADDR(Runtime_BinaryOpIC_MissWithAllocationSite));
}
-void GetPropertyStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+void GetPropertyStub::GenerateAssembly(CodeStubAssembler* assembler) const {
typedef compiler::Node Node;
typedef CodeStubAssembler::Label Label;
typedef CodeStubAssembler::Variable Variable;
- CodeStubAssembler assembler(state);
-
- Label call_runtime(&assembler, Label::kDeferred),
- return_undefined(&assembler), end(&assembler);
-
- Node* object = assembler.Parameter(0);
- Node* key = assembler.Parameter(1);
- Node* context = assembler.Parameter(2);
- Variable var_result(&assembler, MachineRepresentation::kTagged);
+
+ Label call_runtime(assembler, Label::kDeferred), return_undefined(assembler),
+ end(assembler);
+
+ Node* object = assembler->Parameter(0);
+ Node* key = assembler->Parameter(1);
+ Node* context = assembler->Parameter(2);
+ Variable var_result(assembler, MachineRepresentation::kTagged);
CodeStubAssembler::LookupInHolder lookup_property_in_holder =
- [&assembler, context, &var_result, &end](
+ [assembler, context, &var_result, &end](
Node* receiver, Node* holder, Node* holder_map,
Node* holder_instance_type, Node* unique_name, Label* next_holder,
Label* if_bailout) {
- Variable var_value(&assembler, MachineRepresentation::kTagged);
- Label if_found(&assembler);
- assembler.TryGetOwnProperty(
+ Variable var_value(assembler, MachineRepresentation::kTagged);
+ Label if_found(assembler);
+ assembler->TryGetOwnProperty(
context, receiver, holder, holder_map, holder_instance_type,
unique_name, &if_found, &var_value, next_holder, if_bailout);
- assembler.Bind(&if_found);
+ assembler->Bind(&if_found);
{
var_result.Bind(var_value.value());
- assembler.Goto(&end);
+ assembler->Goto(&end);
}
};
CodeStubAssembler::LookupInHolder lookup_element_in_holder =
- [&assembler, context, &var_result, &end](
+ [assembler, context, &var_result, &end](
Node* receiver, Node* holder, Node* holder_map,
Node* holder_instance_type, Node* index, Label* next_holder,
Label* if_bailout) {
// Not supported yet.
- assembler.Use(next_holder);
- assembler.Goto(if_bailout);
+ assembler->Use(next_holder);
+ assembler->Goto(if_bailout);
};
- assembler.TryPrototypeChainLookup(object, key, lookup_property_in_holder,
- lookup_element_in_holder, &return_undefined,
- &call_runtime);
-
- assembler.Bind(&return_undefined);
- {
- var_result.Bind(assembler.UndefinedConstant());
- assembler.Goto(&end);
- }
-
- assembler.Bind(&call_runtime);
+ assembler->TryPrototypeChainLookup(object, key, lookup_property_in_holder,
+ lookup_element_in_holder,
+ &return_undefined, &call_runtime);
+
+ assembler->Bind(&return_undefined);
+ {
+ var_result.Bind(assembler->UndefinedConstant());
+ assembler->Goto(&end);
+ }
+
+ assembler->Bind(&call_runtime);
{
var_result.Bind(
- assembler.CallRuntime(Runtime::kGetProperty, context, object, key));
- assembler.Goto(&end);
- }
-
- assembler.Bind(&end);
- assembler.Return(var_result.value());
+ assembler->CallRuntime(Runtime::kGetProperty, context, object, key));
+ assembler->Goto(&end);
+ }
+
+ assembler->Bind(&end);
+ assembler->Return(var_result.value());
}
// static
@@ -2719,11 +2639,9 @@
return result;
}
-void FastNewClosureStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- CodeStubAssembler assembler(state);
- assembler.Return(
- Generate(&assembler, assembler.Parameter(0), assembler.Parameter(1)));
+void FastNewClosureStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ assembler->Return(
+ Generate(assembler, assembler->Parameter(0), assembler->Parameter(1)));
}
// static
@@ -2780,14 +2698,13 @@
}
void FastNewFunctionContextStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* function = assembler.Parameter(Descriptor::kFunction);
- Node* slots = assembler.Parameter(FastNewFunctionContextDescriptor::kSlots);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- assembler.Return(Generate(&assembler, function, slots, context));
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* function = assembler->Parameter(Descriptor::kFunction);
+ Node* slots = assembler->Parameter(FastNewFunctionContextDescriptor::kSlots);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ assembler->Return(Generate(assembler, function, slots, context));
}
// static
@@ -2835,18 +2752,16 @@
return result.value();
}
-void FastCloneRegExpStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* closure = assembler.Parameter(Descriptor::kClosure);
- Node* literal_index = assembler.Parameter(Descriptor::kLiteralIndex);
- Node* pattern = assembler.Parameter(Descriptor::kPattern);
- Node* flags = assembler.Parameter(Descriptor::kFlags);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- assembler.Return(
- Generate(&assembler, closure, literal_index, pattern, flags, context));
+void FastCloneRegExpStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* closure = assembler->Parameter(Descriptor::kClosure);
+ Node* literal_index = assembler->Parameter(Descriptor::kLiteralIndex);
+ Node* pattern = assembler->Parameter(Descriptor::kPattern);
+ Node* flags = assembler->Parameter(Descriptor::kFlags);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ assembler->Return(
+ Generate(assembler, closure, literal_index, pattern, flags, context));
}
namespace {
@@ -3011,30 +2926,28 @@
}
void FastCloneShallowArrayStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef compiler::Node Node;
typedef CodeStubAssembler::Label Label;
- CodeStubAssembler assembler(state);
-
- Node* closure = assembler.Parameter(Descriptor::kClosure);
- Node* literal_index = assembler.Parameter(Descriptor::kLiteralIndex);
- Node* constant_elements = assembler.Parameter(Descriptor::kConstantElements);
- Node* context = assembler.Parameter(Descriptor::kContext);
- Label call_runtime(&assembler, Label::kDeferred);
- assembler.Return(Generate(&assembler, closure, literal_index, context,
- &call_runtime, allocation_site_mode()));
-
- assembler.Bind(&call_runtime);
- {
- assembler.Comment("call runtime");
- Node* flags = assembler.SmiConstant(
+ Node* closure = assembler->Parameter(Descriptor::kClosure);
+ Node* literal_index = assembler->Parameter(Descriptor::kLiteralIndex);
+ Node* constant_elements = assembler->Parameter(Descriptor::kConstantElements);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+ Label call_runtime(assembler, Label::kDeferred);
+ assembler->Return(Generate(assembler, closure, literal_index, context,
+ &call_runtime, allocation_site_mode()));
+
+ assembler->Bind(&call_runtime);
+ {
+ assembler->Comment("call runtime");
+ Node* flags = assembler->SmiConstant(
Smi::FromInt(ArrayLiteral::kShallowElements |
(allocation_site_mode() == TRACK_ALLOCATION_SITE
? 0
: ArrayLiteral::kDisableMementos)));
- assembler.Return(assembler.CallRuntime(Runtime::kCreateArrayLiteral,
- context, closure, literal_index,
- constant_elements, flags));
+ assembler->Return(assembler->CallRuntime(Runtime::kCreateArrayLiteral,
+ context, closure, literal_index,
+ constant_elements, flags));
}
}
@@ -3056,33 +2969,32 @@
}
void StoreFastElementStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
+ CodeStubAssembler* assembler) const {
typedef CodeStubAssembler::Label Label;
typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
-
- assembler.Comment(
+
+ assembler->Comment(
"StoreFastElementStub: js_array=%d, elements_kind=%s, store_mode=%d",
is_js_array(), ElementsKindToString(elements_kind()), store_mode());
- Node* receiver = assembler.Parameter(Descriptor::kReceiver);
- Node* key = assembler.Parameter(Descriptor::kName);
- Node* value = assembler.Parameter(Descriptor::kValue);
- Node* slot = assembler.Parameter(Descriptor::kSlot);
- Node* vector = assembler.Parameter(Descriptor::kVector);
- Node* context = assembler.Parameter(Descriptor::kContext);
-
- Label miss(&assembler);
-
- assembler.EmitElementStore(receiver, key, value, is_js_array(),
- elements_kind(), store_mode(), &miss);
- assembler.Return(value);
-
- assembler.Bind(&miss);
- {
- assembler.Comment("Miss");
- assembler.TailCallRuntime(Runtime::kKeyedStoreIC_Miss, context, value, slot,
- vector, receiver, key);
+ Node* receiver = assembler->Parameter(Descriptor::kReceiver);
+ Node* key = assembler->Parameter(Descriptor::kName);
+ Node* value = assembler->Parameter(Descriptor::kValue);
+ Node* slot = assembler->Parameter(Descriptor::kSlot);
+ Node* vector = assembler->Parameter(Descriptor::kVector);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label miss(assembler);
+
+ assembler->EmitElementStore(receiver, key, value, is_js_array(),
+ elements_kind(), store_mode(), &miss);
+ assembler->Return(value);
+
+ assembler->Bind(&miss);
+ {
+ assembler->Comment("Miss");
+ assembler->TailCallRuntime(Runtime::kKeyedStoreIC_Miss, context, value,
+ slot, vector, receiver, key);
}
}
@@ -3166,55 +3078,50 @@
}
void CreateAllocationSiteStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- CodeStubAssembler assembler(state);
- assembler.Return(assembler.CreateAllocationSiteInFeedbackVector(
- assembler.Parameter(Descriptor::kVector),
- assembler.Parameter(Descriptor::kSlot)));
-}
-
-void CreateWeakCellStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- CodeStubAssembler assembler(state);
- assembler.Return(assembler.CreateWeakCellInFeedbackVector(
- assembler.Parameter(Descriptor::kVector),
- assembler.Parameter(Descriptor::kSlot),
- assembler.Parameter(Descriptor::kValue)));
+ CodeStubAssembler* assembler) const {
+ assembler->Return(assembler->CreateAllocationSiteInFeedbackVector(
+ assembler->Parameter(Descriptor::kVector),
+ assembler->Parameter(Descriptor::kSlot)));
+}
+
+void CreateWeakCellStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ assembler->Return(assembler->CreateWeakCellInFeedbackVector(
+ assembler->Parameter(Descriptor::kVector),
+ assembler->Parameter(Descriptor::kSlot),
+ assembler->Parameter(Descriptor::kValue)));
}
void ArrayNoArgumentConstructorStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* native_context = assembler.LoadObjectField(
- assembler.Parameter(Descriptor::kFunction), JSFunction::kContextOffset);
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* native_context = assembler->LoadObjectField(
+ assembler->Parameter(Descriptor::kFunction), JSFunction::kContextOffset);
bool track_allocation_site =
AllocationSite::GetMode(elements_kind()) == TRACK_ALLOCATION_SITE &&
override_mode() != DISABLE_ALLOCATION_SITES;
- Node* allocation_site = track_allocation_site
- ? assembler.Parameter(Descriptor::kAllocationSite)
- : nullptr;
+ Node* allocation_site =
+ track_allocation_site ? assembler->Parameter(Descriptor::kAllocationSite)
+ : nullptr;
Node* array_map =
- assembler.LoadJSArrayElementsMap(elements_kind(), native_context);
- Node* array = assembler.AllocateJSArray(
+ assembler->LoadJSArrayElementsMap(elements_kind(), native_context);
+ Node* array = assembler->AllocateJSArray(
elements_kind(), array_map,
- assembler.IntPtrConstant(JSArray::kPreallocatedArrayElements),
- assembler.SmiConstant(Smi::kZero), allocation_site);
- assembler.Return(array);
+ assembler->IntPtrConstant(JSArray::kPreallocatedArrayElements),
+ assembler->SmiConstant(Smi::kZero), allocation_site);
+ assembler->Return(array);
}
void InternalArrayNoArgumentConstructorStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
Node* array_map =
- assembler.LoadObjectField(assembler.Parameter(Descriptor::kFunction),
- JSFunction::kPrototypeOrInitialMapOffset);
- Node* array = assembler.AllocateJSArray(
+ assembler->LoadObjectField(assembler->Parameter(Descriptor::kFunction),
+ JSFunction::kPrototypeOrInitialMapOffset);
+ Node* array = assembler->AllocateJSArray(
elements_kind(), array_map,
- assembler.IntPtrConstant(JSArray::kPreallocatedArrayElements),
- assembler.SmiConstant(Smi::kZero), nullptr);
- assembler.Return(array);
+ assembler->IntPtrConstant(JSArray::kPreallocatedArrayElements),
+ assembler->SmiConstant(Smi::kZero), nullptr);
+ assembler->Return(array);
}
namespace {
@@ -3284,52 +3191,49 @@
} // namespace
void ArraySingleArgumentConstructorStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* function = assembler.Parameter(Descriptor::kFunction);
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* function = assembler->Parameter(Descriptor::kFunction);
Node* native_context =
- assembler.LoadObjectField(function, JSFunction::kContextOffset);
+ assembler->LoadObjectField(function, JSFunction::kContextOffset);
Node* array_map =
- assembler.LoadJSArrayElementsMap(elements_kind(), native_context);
+ assembler->LoadJSArrayElementsMap(elements_kind(), native_context);
AllocationSiteMode mode = override_mode() == DISABLE_ALLOCATION_SITES
? DONT_TRACK_ALLOCATION_SITE
: AllocationSite::GetMode(elements_kind());
- Node* allocation_site = assembler.Parameter(Descriptor::kAllocationSite);
- SingleArgumentConstructorCommon<Descriptor>(&assembler, elements_kind(),
+ Node* allocation_site = assembler->Parameter(Descriptor::kAllocationSite);
+ SingleArgumentConstructorCommon<Descriptor>(assembler, elements_kind(),
array_map, allocation_site, mode);
}
void InternalArraySingleArgumentConstructorStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- Node* function = assembler.Parameter(Descriptor::kFunction);
- Node* array_map = assembler.LoadObjectField(
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* function = assembler->Parameter(Descriptor::kFunction);
+ Node* array_map = assembler->LoadObjectField(
function, JSFunction::kPrototypeOrInitialMapOffset);
SingleArgumentConstructorCommon<Descriptor>(
- &assembler, elements_kind(), array_map, assembler.UndefinedConstant(),
+ assembler, elements_kind(), array_map, assembler->UndefinedConstant(),
DONT_TRACK_ALLOCATION_SITE);
}
void GrowArrayElementsStub::GenerateAssembly(
- compiler::CodeAssemblerState* state) const {
- typedef compiler::Node Node;
- CodeStubAssembler assembler(state);
- CodeStubAssembler::Label runtime(&assembler,
+ CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ CodeStubAssembler::Label runtime(assembler,
CodeStubAssembler::Label::kDeferred);
- Node* object = assembler.Parameter(Descriptor::kObject);
- Node* key = assembler.Parameter(Descriptor::kKey);
- Node* context = assembler.Parameter(Descriptor::kContext);
+ Node* object = assembler->Parameter(Descriptor::kObject);
+ Node* key = assembler->Parameter(Descriptor::kKey);
+ Node* context = assembler->Parameter(Descriptor::kContext);
ElementsKind kind = elements_kind();
- Node* elements = assembler.LoadElements(object);
+ Node* elements = assembler->LoadElements(object);
Node* new_elements =
- assembler.TryGrowElementsCapacity(object, elements, kind, key, &runtime);
- assembler.Return(new_elements);
-
- assembler.Bind(&runtime);
+ assembler->TryGrowElementsCapacity(object, elements, kind, key, &runtime);
+ assembler->Return(new_elements);
+
+ assembler->Bind(&runtime);
// TODO(danno): Make this a tail call when the stub is only used from TurboFan
// code. This musn't be a tail call for now, since the caller site in lithium
// creates a safepoint. This safepoint musn't have a different number of
@@ -3339,8 +3243,8 @@
// tail call pushing the arguments on the stack for the runtime call). By not
// tail-calling, the runtime call case also has zero arguments on the stack
// for the stub frame.
- assembler.Return(
- assembler.CallRuntime(Runtime::kGrowArrayElements, context, object, key));
+ assembler->Return(assembler->CallRuntime(Runtime::kGrowArrayElements, context,
+ object, key));
}
ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate)
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698