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

Side by Side Diff: src/objects-inl.h

Issue 441643008: Track number of generic ICs per function (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 7043 matching lines...) Expand 10 before | Expand all | Expand 10 after
7054 } 7054 }
7055 7055
7056 7056
7057 int TypeFeedbackInfo::ic_with_type_info_count() { 7057 int TypeFeedbackInfo::ic_with_type_info_count() {
7058 int current = Smi::cast(READ_FIELD(this, kStorage2Offset))->value(); 7058 int current = Smi::cast(READ_FIELD(this, kStorage2Offset))->value();
7059 return ICsWithTypeInfoCountField::decode(current); 7059 return ICsWithTypeInfoCountField::decode(current);
7060 } 7060 }
7061 7061
7062 7062
7063 void TypeFeedbackInfo::change_ic_with_type_info_count(int delta) { 7063 void TypeFeedbackInfo::change_ic_with_type_info_count(int delta) {
7064 if (delta == 0) return;
7064 int value = Smi::cast(READ_FIELD(this, kStorage2Offset))->value(); 7065 int value = Smi::cast(READ_FIELD(this, kStorage2Offset))->value();
7065 int new_count = ICsWithTypeInfoCountField::decode(value) + delta; 7066 int new_count = ICsWithTypeInfoCountField::decode(value) + delta;
7066 // We can get negative count here when the type-feedback info is 7067 // We can get negative count here when the type-feedback info is
7067 // shared between two code objects. The can only happen when 7068 // shared between two code objects. The can only happen when
7068 // the debugger made a shallow copy of code object (see Heap::CopyCode). 7069 // the debugger made a shallow copy of code object (see Heap::CopyCode).
7069 // Since we do not optimize when the debugger is active, we can skip 7070 // Since we do not optimize when the debugger is active, we can skip
7070 // this counter update. 7071 // this counter update.
7071 if (new_count >= 0) { 7072 if (new_count >= 0) {
7072 new_count &= ICsWithTypeInfoCountField::kMask; 7073 new_count &= ICsWithTypeInfoCountField::kMask;
7073 value = ICsWithTypeInfoCountField::update(value, new_count); 7074 value = ICsWithTypeInfoCountField::update(value, new_count);
7074 WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(value)); 7075 WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(value));
7075 } 7076 }
7076 } 7077 }
7077 7078
7078 7079
7080 int TypeFeedbackInfo::ic_generic_count() {
7081 return Smi::cast(READ_FIELD(this, kStorage3Offset))->value();
7082 }
7083
7084
7085 void TypeFeedbackInfo::change_ic_generic_count(int delta) {
7086 if (delta == 0) return;
7087 int new_count = ic_generic_count() + delta;
7088 if (new_count >= 0) {
7089 new_count &= ~Smi::kMinValue;
7090 WRITE_FIELD(this, kStorage3Offset, Smi::FromInt(new_count));
7091 }
7092 }
7093
7094
7079 void TypeFeedbackInfo::initialize_storage() { 7095 void TypeFeedbackInfo::initialize_storage() {
7080 WRITE_FIELD(this, kStorage1Offset, Smi::FromInt(0)); 7096 WRITE_FIELD(this, kStorage1Offset, Smi::FromInt(0));
7081 WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(0)); 7097 WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(0));
7098 WRITE_FIELD(this, kStorage3Offset, Smi::FromInt(0));
7082 } 7099 }
7083 7100
7084 7101
7085 void TypeFeedbackInfo::change_own_type_change_checksum() { 7102 void TypeFeedbackInfo::change_own_type_change_checksum() {
7086 int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); 7103 int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value();
7087 int checksum = OwnTypeChangeChecksum::decode(value); 7104 int checksum = OwnTypeChangeChecksum::decode(value);
7088 checksum = (checksum + 1) % (1 << kTypeChangeChecksumBits); 7105 checksum = (checksum + 1) % (1 << kTypeChangeChecksumBits);
7089 value = OwnTypeChangeChecksum::update(value, checksum); 7106 value = OwnTypeChangeChecksum::update(value, checksum);
7090 // Ensure packed bit field is in Smi range. 7107 // Ensure packed bit field is in Smi range.
7091 if (value > Smi::kMaxValue) value |= Smi::kMinValue; 7108 if (value > Smi::kMaxValue) value |= Smi::kMinValue;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
7259 #undef READ_SHORT_FIELD 7276 #undef READ_SHORT_FIELD
7260 #undef WRITE_SHORT_FIELD 7277 #undef WRITE_SHORT_FIELD
7261 #undef READ_BYTE_FIELD 7278 #undef READ_BYTE_FIELD
7262 #undef WRITE_BYTE_FIELD 7279 #undef WRITE_BYTE_FIELD
7263 #undef NOBARRIER_READ_BYTE_FIELD 7280 #undef NOBARRIER_READ_BYTE_FIELD
7264 #undef NOBARRIER_WRITE_BYTE_FIELD 7281 #undef NOBARRIER_WRITE_BYTE_FIELD
7265 7282
7266 } } // namespace v8::internal 7283 } } // namespace v8::internal
7267 7284
7268 #endif // V8_OBJECTS_INL_H_ 7285 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698