dart-sdk/runtime/vm/megamorphic_cache_table.h
kmillikin@google.com a119414b2f Cache lookups at megamorphic call sites in optimized code.
The function name and argument descriptor are mapped to a lookup cache
at compile time.  The cache maps class id to target function.  It is
resizable.

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@15889 260f80e4-7a28-3924-810f-c04153c831b5
2012-12-10 09:48:52 +00:00

54 lines
1.2 KiB
C++

// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef VM_MEGAMORPHIC_CACHE_TABLE_H_
#define VM_MEGAMORPHIC_CACHE_TABLE_H_
#include "vm/allocation.h"
namespace dart {
class Array;
class Function;
class ObjectPointerVisitor;
class RawArray;
class RawFunction;
class RawMegamorphicCache;
class RawString;
class String;
class MegamorphicCacheTable {
public:
MegamorphicCacheTable();
~MegamorphicCacheTable();
RawFunction* miss_handler() const { return miss_handler_; }
void InitMissHandler();
RawMegamorphicCache* Lookup(const String& name, const Array& descriptor);
void VisitObjectPointers(ObjectPointerVisitor* visitor);
void PrintSizes();
private:
struct Entry {
RawString* name;
RawArray* descriptor;
RawMegamorphicCache* cache;
};
static const int kCapacityIncrement = 128;
RawFunction* miss_handler_;
intptr_t capacity_;
intptr_t length_;
Entry* table_;
DISALLOW_COPY_AND_ASSIGN(MegamorphicCacheTable);
};
} // namespace dart
#endif // VM_MEGAMORPHIC_CACHE_TABLE_H_