Introduce two new symbols for vector based ICs.
authormvstanton@chromium.org <mvstanton@chromium.org>
Mon, 25 Aug 2014 15:17:06 +0000 (15:17 +0000)
committermvstanton@chromium.org <mvstanton@chromium.org>
Mon, 25 Aug 2014 15:17:06 +0000 (15:17 +0000)
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

include/v8.h
src/heap/heap.cc
src/heap/heap.h
src/objects-inl.h
src/objects.h

index ce49408a7740a6d81aa6e71e4894f87da11670f8..cbe8edd59b59349f1492d68853c21ca79f9f122b 100644 (file)
@@ -5693,7 +5693,7 @@ class Internals {
   static const int kNullValueRootIndex = 7;
   static const int kTrueValueRootIndex = 8;
   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
   // to avoid that resource-constrained embedders run low on memory.
index 119d15008e650a50f7a5434c3f0e97e838f65ae0..a3d653d33b7eefebc64efa3bb48f3b0c2d79aa5a 100644 (file)
@@ -2863,6 +2863,8 @@ void Heap::CreateInitialObjects() {
   set_elements_transition_symbol(*factory->NewPrivateSymbol());
   set_frozen_symbol(*factory->NewPrivateSymbol());
   set_megamorphic_symbol(*factory->NewPrivateSymbol());
+  set_premonomorphic_symbol(*factory->NewPrivateSymbol());
+  set_generic_symbol(*factory->NewPrivateSymbol());
   set_nonexistent_symbol(*factory->NewPrivateSymbol());
   set_normal_ic_symbol(*factory->NewPrivateSymbol());
   set_observed_symbol(*factory->NewPrivateSymbol());
index da0f3e3c09d0d051af4d4ab6694f4a0e1dc75ddb..8b4a021e7595eb3e5cde01aa1ae774ca2ed37ba5 100644 (file)
@@ -183,6 +183,8 @@ namespace internal {
   V(Symbol, observed_symbol, ObservedSymbol)                                   \
   V(Symbol, uninitialized_symbol, UninitializedSymbol)                         \
   V(Symbol, megamorphic_symbol, MegamorphicSymbol)                             \
+  V(Symbol, premonomorphic_symbol, PremonomorphicSymbol)                       \
+  V(Symbol, generic_symbol, GenericSymbol)                                     \
   V(Symbol, stack_trace_symbol, StackTraceSymbol)                              \
   V(Symbol, detailed_stack_trace_symbol, DetailedStackTraceSymbol)             \
   V(Symbol, normal_ic_symbol, NormalICSymbol)                                  \
index 0ec6feb2805e887b6f52a2bd5c8e4ca26be76f03..9289900675cf1cb89a4457e1f5a9dfe2b145fefb 100644 (file)
@@ -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,
     ElementsKind elements_kind) {
   return Handle<Object>(Smi::FromInt(static_cast<int>(elements_kind)), isolate);
index 1c2f4e9e0cd6549aec8aec51a870c28ebd3fe5ff..d6f4190f0d34b14679b9c4d0f1573cc20acff9d4 100644 (file)
@@ -8407,6 +8407,12 @@ class TypeFeedbackInfo: public Struct {
   // The object that indicates a megamorphic state.
   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
   // ElementsKind
   static inline Handle<Object> MonomorphicArraySentinel(Isolate* isolate,