Introduce two new symbols for vector based ICs.

Vector based load ics need a premonomorphic and generic symbol.

R=verwaest@chromium.org

Review URL: https://codereview.chromium.org/505763002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23365 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 22d9cd21
...@@ -5693,7 +5693,7 @@ class Internals { ...@@ -5693,7 +5693,7 @@ class Internals {
static const int kNullValueRootIndex = 7; static const int kNullValueRootIndex = 7;
static const int kTrueValueRootIndex = 8; static const int kTrueValueRootIndex = 8;
static const int kFalseValueRootIndex = 9; static const int kFalseValueRootIndex = 9;
static const int kEmptyStringRootIndex = 162; static const int kEmptyStringRootIndex = 164;
// The external allocation limit should be below 256 MB on all architectures // The external allocation limit should be below 256 MB on all architectures
// to avoid that resource-constrained embedders run low on memory. // to avoid that resource-constrained embedders run low on memory.
......
...@@ -2863,6 +2863,8 @@ void Heap::CreateInitialObjects() { ...@@ -2863,6 +2863,8 @@ void Heap::CreateInitialObjects() {
set_elements_transition_symbol(*factory->NewPrivateSymbol()); set_elements_transition_symbol(*factory->NewPrivateSymbol());
set_frozen_symbol(*factory->NewPrivateSymbol()); set_frozen_symbol(*factory->NewPrivateSymbol());
set_megamorphic_symbol(*factory->NewPrivateSymbol()); set_megamorphic_symbol(*factory->NewPrivateSymbol());
set_premonomorphic_symbol(*factory->NewPrivateSymbol());
set_generic_symbol(*factory->NewPrivateSymbol());
set_nonexistent_symbol(*factory->NewPrivateSymbol()); set_nonexistent_symbol(*factory->NewPrivateSymbol());
set_normal_ic_symbol(*factory->NewPrivateSymbol()); set_normal_ic_symbol(*factory->NewPrivateSymbol());
set_observed_symbol(*factory->NewPrivateSymbol()); set_observed_symbol(*factory->NewPrivateSymbol());
......
...@@ -183,6 +183,8 @@ namespace internal { ...@@ -183,6 +183,8 @@ namespace internal {
V(Symbol, observed_symbol, ObservedSymbol) \ V(Symbol, observed_symbol, ObservedSymbol) \
V(Symbol, uninitialized_symbol, UninitializedSymbol) \ V(Symbol, uninitialized_symbol, UninitializedSymbol) \
V(Symbol, megamorphic_symbol, MegamorphicSymbol) \ V(Symbol, megamorphic_symbol, MegamorphicSymbol) \
V(Symbol, premonomorphic_symbol, PremonomorphicSymbol) \
V(Symbol, generic_symbol, GenericSymbol) \
V(Symbol, stack_trace_symbol, StackTraceSymbol) \ V(Symbol, stack_trace_symbol, StackTraceSymbol) \
V(Symbol, detailed_stack_trace_symbol, DetailedStackTraceSymbol) \ V(Symbol, detailed_stack_trace_symbol, DetailedStackTraceSymbol) \
V(Symbol, normal_ic_symbol, NormalICSymbol) \ V(Symbol, normal_ic_symbol, NormalICSymbol) \
......
...@@ -7012,6 +7012,16 @@ Handle<Object> TypeFeedbackInfo::MegamorphicSentinel(Isolate* isolate) { ...@@ -7012,6 +7012,16 @@ Handle<Object> TypeFeedbackInfo::MegamorphicSentinel(Isolate* isolate) {
} }
Handle<Object> TypeFeedbackInfo::PremonomorphicSentinel(Isolate* isolate) {
return isolate->factory()->megamorphic_symbol();
}
Handle<Object> TypeFeedbackInfo::GenericSentinel(Isolate* isolate) {
return isolate->factory()->generic_symbol();
}
Handle<Object> TypeFeedbackInfo::MonomorphicArraySentinel(Isolate* isolate, Handle<Object> TypeFeedbackInfo::MonomorphicArraySentinel(Isolate* isolate,
ElementsKind elements_kind) { ElementsKind elements_kind) {
return Handle<Object>(Smi::FromInt(static_cast<int>(elements_kind)), isolate); return Handle<Object>(Smi::FromInt(static_cast<int>(elements_kind)), isolate);
......
...@@ -8407,6 +8407,12 @@ class TypeFeedbackInfo: public Struct { ...@@ -8407,6 +8407,12 @@ class TypeFeedbackInfo: public Struct {
// The object that indicates a megamorphic state. // The object that indicates a megamorphic state.
static inline Handle<Object> MegamorphicSentinel(Isolate* isolate); static inline Handle<Object> MegamorphicSentinel(Isolate* isolate);
// The object that indicates a premonomorphic state.
static inline Handle<Object> PremonomorphicSentinel(Isolate* isolate);
// The object that indicates a generic state.
static inline Handle<Object> GenericSentinel(Isolate* isolate);
// The object that indicates a monomorphic state of Array with // The object that indicates a monomorphic state of Array with
// ElementsKind // ElementsKind
static inline Handle<Object> MonomorphicArraySentinel(Isolate* isolate, static inline Handle<Object> MonomorphicArraySentinel(Isolate* isolate,
......
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