| Index: src/type-feedback-vector.h
|
| diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h
|
| index 29e4402d7d2dac5446ca360655635a5f9b3105a3..cbba89339a305d30ff050fecd57bb78732102e31 100644
|
| --- a/src/type-feedback-vector.h
|
| +++ b/src/type-feedback-vector.h
|
| @@ -87,10 +87,7 @@ class ZoneFeedbackVectorSpec {
|
| class TypeFeedbackVector : public FixedArray {
|
| public:
|
| // Casting.
|
| - static TypeFeedbackVector* cast(Object* obj) {
|
| - DCHECK(obj->IsTypeFeedbackVector());
|
| - return reinterpret_cast<TypeFeedbackVector*>(obj);
|
| - }
|
| + static inline TypeFeedbackVector* cast(Object* obj);
|
|
|
| static const int kReservedIndexCount = 3;
|
| static const int kFirstICSlotIndex = 0;
|
| @@ -99,89 +96,33 @@ class TypeFeedbackVector : public FixedArray {
|
|
|
| static int elements_per_ic_slot() { return 2; }
|
|
|
| - int first_ic_slot_index() const {
|
| - DCHECK(length() >= kReservedIndexCount);
|
| - return Smi::cast(get(kFirstICSlotIndex))->value();
|
| - }
|
| -
|
| - int ic_with_type_info_count() {
|
| - return length() > 0 ? Smi::cast(get(kWithTypesIndex))->value() : 0;
|
| - }
|
| -
|
| - void change_ic_with_type_info_count(int delta) {
|
| - if (delta == 0) return;
|
| - int value = ic_with_type_info_count() + delta;
|
| - // Could go negative because of the debugger.
|
| - if (value >= 0) {
|
| - set(kWithTypesIndex, Smi::FromInt(value));
|
| - }
|
| - }
|
| -
|
| - int ic_generic_count() {
|
| - return length() > 0 ? Smi::cast(get(kGenericCountIndex))->value() : 0;
|
| - }
|
| -
|
| - void change_ic_generic_count(int delta) {
|
| - if (delta == 0) return;
|
| - int value = ic_generic_count() + delta;
|
| - if (value >= 0) {
|
| - set(kGenericCountIndex, Smi::FromInt(value));
|
| - }
|
| - }
|
| -
|
| + inline int first_ic_slot_index() const;
|
| + inline int ic_with_type_info_count();
|
| + inline void change_ic_with_type_info_count(int delta);
|
| + inline int ic_generic_count();
|
| + inline void change_ic_generic_count(int delta);
|
| inline int ic_metadata_length() const;
|
|
|
| bool SpecDiffersFrom(const ZoneFeedbackVectorSpec* other_spec) const;
|
|
|
| - int Slots() const {
|
| - if (length() == 0) return 0;
|
| - return Max(
|
| - 0, first_ic_slot_index() - ic_metadata_length() - kReservedIndexCount);
|
| - }
|
| -
|
| - int ICSlots() const {
|
| - if (length() == 0) return 0;
|
| - return (length() - first_ic_slot_index()) / elements_per_ic_slot();
|
| - }
|
| + inline int Slots() const;
|
| + inline int ICSlots() const;
|
|
|
| // Conversion from a slot or ic slot to an integer index to the underlying
|
| // array.
|
| - int GetIndex(FeedbackVectorSlot slot) const {
|
| - DCHECK(slot.ToInt() < first_ic_slot_index());
|
| - return kReservedIndexCount + ic_metadata_length() + slot.ToInt();
|
| - }
|
| -
|
| - int GetIndex(FeedbackVectorICSlot slot) const {
|
| - int first_ic_slot = first_ic_slot_index();
|
| - DCHECK(slot.ToInt() < ICSlots());
|
| - return first_ic_slot + slot.ToInt() * elements_per_ic_slot();
|
| - }
|
| + inline int GetIndex(FeedbackVectorSlot slot) const;
|
| + inline int GetIndex(FeedbackVectorICSlot slot) const;
|
|
|
| // Conversion from an integer index to either a slot or an ic slot. The caller
|
| // should know what kind she expects.
|
| - FeedbackVectorSlot ToSlot(int index) const {
|
| - DCHECK(index >= kReservedIndexCount && index < first_ic_slot_index());
|
| - return FeedbackVectorSlot(index - ic_metadata_length() -
|
| - kReservedIndexCount);
|
| - }
|
| -
|
| - FeedbackVectorICSlot ToICSlot(int index) const {
|
| - DCHECK(index >= first_ic_slot_index() && index < length());
|
| - int ic_slot = (index - first_ic_slot_index()) / elements_per_ic_slot();
|
| - return FeedbackVectorICSlot(ic_slot);
|
| - }
|
| -
|
| - Object* Get(FeedbackVectorSlot slot) const { return get(GetIndex(slot)); }
|
| - void Set(FeedbackVectorSlot slot, Object* value,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER) {
|
| - set(GetIndex(slot), value, mode);
|
| - }
|
| -
|
| - Object* Get(FeedbackVectorICSlot slot) const { return get(GetIndex(slot)); }
|
| - void Set(FeedbackVectorICSlot slot, Object* value,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER) {
|
| - set(GetIndex(slot), value, mode);
|
| - }
|
| + inline FeedbackVectorSlot ToSlot(int index) const;
|
| + inline FeedbackVectorICSlot ToICSlot(int index) const;
|
| + inline Object* Get(FeedbackVectorSlot slot) const;
|
| + inline void Set(FeedbackVectorSlot slot, Object* value,
|
| + WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
|
| + inline Object* Get(FeedbackVectorICSlot slot) const;
|
| + inline void Set(FeedbackVectorICSlot slot, Object* value,
|
| + WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
|
|
|
| // IC slots need metadata to recognize the type of IC.
|
| Code::Kind GetKind(FeedbackVectorICSlot slot) const;
|
| @@ -320,27 +261,16 @@ class FeedbackNexus {
|
| virtual void ConfigurePremonomorphic();
|
| virtual void ConfigureMegamorphic();
|
|
|
| - Object* GetFeedback() const { return vector()->Get(slot()); }
|
| - Object* GetFeedbackExtra() const {
|
| - DCHECK(TypeFeedbackVector::elements_per_ic_slot() > 1);
|
| - int extra_index = vector()->GetIndex(slot()) + 1;
|
| - return vector()->get(extra_index);
|
| - }
|
| + inline Object* GetFeedback() const;
|
| + inline Object* GetFeedbackExtra() const;
|
|
|
| protected:
|
| - Isolate* GetIsolate() const { return vector()->GetIsolate(); }
|
| + inline Isolate* GetIsolate() const;
|
|
|
| - void SetFeedback(Object* feedback,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER) {
|
| - vector()->Set(slot(), feedback, mode);
|
| - }
|
| -
|
| - void SetFeedbackExtra(Object* feedback_extra,
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER) {
|
| - DCHECK(TypeFeedbackVector::elements_per_ic_slot() > 1);
|
| - int index = vector()->GetIndex(slot()) + 1;
|
| - vector()->set(index, feedback_extra, mode);
|
| - }
|
| + inline void SetFeedback(Object* feedback,
|
| + WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
|
| + inline void SetFeedbackExtra(Object* feedback_extra,
|
| + WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
|
|
|
| Handle<FixedArray> EnsureArrayOfSize(int length);
|
| Handle<FixedArray> EnsureExtraArrayOfSize(int length);
|
|
|