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

Unified Diff: runtime/vm/object.h

Issue 11299298: Cache lookups at megamorphic call sites in optimized code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: One change I forgot. Created 8 years 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 | « runtime/vm/megamorphic_cache_table.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.h
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 32588b36f6c96eb6eddc84ff3f60fed0cacc7044..331f15367591d8d382a7d07d69a77348ee6a3e5f 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -294,6 +294,9 @@ class Object {
}
static RawClass* unwind_error_class() { return unwind_error_class_; }
static RawClass* icdata_class() { return icdata_class_; }
+ static RawClass* megamorphic_cache_class() {
+ return megamorphic_cache_class_;
+ }
static RawClass* subtypetestcache_class() { return subtypetestcache_class_; }
static RawError* Init(Isolate* isolate);
@@ -428,6 +431,7 @@ class Object {
static RawClass* context_class_; // Class of the Context vm object.
static RawClass* context_scope_class_; // Class of ContextScope vm object.
static RawClass* icdata_class_; // Class of ICData.
+ static RawClass* megamorphic_cache_class_; // Class of MegamorphiCache.
static RawClass* subtypetestcache_class_; // Class of SubtypeTestCache.
static RawClass* api_error_class_; // Class of ApiError.
static RawClass* language_error_class_; // Class of LanguageError.
@@ -2932,6 +2936,59 @@ class ICData : public Object {
};
+class MegamorphicCache : public Object {
+ public:
+ static const int kInitialCapacity = 16;
+ static const double kLoadFactor = 0.75;
+
+ RawArray* buckets() const;
+ void set_buckets(const Array& buckets) const;
+
+ intptr_t mask() const;
+ void set_mask(intptr_t mask) const;
+
+ intptr_t filled_entry_count() const;
+ void set_filled_entry_count(intptr_t num) const;
+
+ static intptr_t buckets_offset() {
+ return OFFSET_OF(RawMegamorphicCache, buckets_);
+ }
+ static intptr_t mask_offset() {
+ return OFFSET_OF(RawMegamorphicCache, mask_);
+ }
+
+ static RawMegamorphicCache* New();
+
+ void EnsureCapacity() const;
+
+ void Insert(const Smi& class_id, const Function& target) const;
+
+ static intptr_t InstanceSize() {
+ return RoundedAllocationSize(sizeof(RawMegamorphicCache));
+ }
+
+ private:
+ friend class Class;
+
+ enum {
+ kClassIdIndex,
+ kTargetFunctionIndex,
+ kEntryLength,
+ };
+
+ static inline void SetEntry(const Array& array,
+ intptr_t index,
+ const Smi& class_id,
+ const Function& target);
+
+ static inline RawObject* GetClassId(const Array& array, intptr_t index);
+ static inline RawObject* GetTargetFunction(const Array& array,
+ intptr_t index);
+
+ HEAP_OBJECT_IMPLEMENTATION(MegamorphicCache, Object);
+};
+
+
class SubtypeTestCache : public Object {
public:
enum Entries {
@@ -6001,6 +6058,26 @@ bool String::Equals(const String& str,
return true;
}
+
+void MegamorphicCache::SetEntry(const Array& array,
+ intptr_t index,
+ const Smi& class_id,
+ const Function& target) {
+ array.SetAt((index * kEntryLength) + kClassIdIndex, class_id);
+ array.SetAt((index * kEntryLength) + kTargetFunctionIndex, target);
+}
+
+
+RawObject* MegamorphicCache::GetClassId(const Array& array, intptr_t index) {
+ return array.At((index * kEntryLength) + kClassIdIndex);
+}
+
+
+RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
+ intptr_t index) {
+ return array.At((index * kEntryLength) + kTargetFunctionIndex);
+}
+
} // namespace dart
#endif // VM_OBJECT_H_
« no previous file with comments | « runtime/vm/megamorphic_cache_table.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698