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

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

Issue 292183008: Reland r21442 "Inobject slack tracking is done on a per-closure basis instead of per-shared info ba… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: The fix Created 6 years, 7 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.cc ('k') | src/runtime.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 4054 matching lines...) Expand 10 before | Expand all | Expand 10 after
4065 } else { 4065 } else {
4066 set_bit_field2(bit_field2() & ~(1 << kIsExtensible)); 4066 set_bit_field2(bit_field2() & ~(1 << kIsExtensible));
4067 } 4067 }
4068 } 4068 }
4069 4069
4070 bool Map::is_extensible() { 4070 bool Map::is_extensible() {
4071 return ((1 << kIsExtensible) & bit_field2()) != 0; 4071 return ((1 << kIsExtensible) & bit_field2()) != 0;
4072 } 4072 }
4073 4073
4074 4074
4075 void Map::set_attached_to_shared_function_info(bool value) {
4076 if (value) {
4077 set_bit_field2(bit_field2() | (1 << kAttachedToSharedFunctionInfo));
4078 } else {
4079 set_bit_field2(bit_field2() & ~(1 << kAttachedToSharedFunctionInfo));
4080 }
4081 }
4082
4083 bool Map::attached_to_shared_function_info() {
4084 return ((1 << kAttachedToSharedFunctionInfo) & bit_field2()) != 0;
4085 }
4086
4087
4088 void Map::set_is_shared(bool value) { 4075 void Map::set_is_shared(bool value) {
4089 set_bit_field3(IsShared::update(bit_field3(), value)); 4076 set_bit_field3(IsShared::update(bit_field3(), value));
4090 } 4077 }
4091 4078
4092 4079
4093 bool Map::is_shared() { 4080 bool Map::is_shared() {
4094 return IsShared::decode(bit_field3()); } 4081 return IsShared::decode(bit_field3()); }
4095 4082
4096 4083
4097 void Map::set_dictionary_map(bool value) { 4084 void Map::set_dictionary_map(bool value) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
4144 void Map::set_migration_target(bool value) { 4131 void Map::set_migration_target(bool value) {
4145 set_bit_field3(IsMigrationTarget::update(bit_field3(), value)); 4132 set_bit_field3(IsMigrationTarget::update(bit_field3(), value));
4146 } 4133 }
4147 4134
4148 4135
4149 bool Map::is_migration_target() { 4136 bool Map::is_migration_target() {
4150 return IsMigrationTarget::decode(bit_field3()); 4137 return IsMigrationTarget::decode(bit_field3());
4151 } 4138 }
4152 4139
4153 4140
4141 void Map::set_done_inobject_slack_tracking(bool value) {
4142 set_bit_field3(DoneInobjectSlackTracking::update(bit_field3(), value));
4143 }
4144
4145
4146 bool Map::done_inobject_slack_tracking() {
4147 return DoneInobjectSlackTracking::decode(bit_field3());
4148 }
4149
4150
4151 void Map::set_construction_count(int value) {
4152 set_bit_field3(ConstructionCount::update(bit_field3(), value));
4153 }
4154
4155
4156 int Map::construction_count() {
4157 return ConstructionCount::decode(bit_field3());
4158 }
4159
4160
4154 void Map::freeze() { 4161 void Map::freeze() {
4155 set_bit_field3(IsFrozen::update(bit_field3(), true)); 4162 set_bit_field3(IsFrozen::update(bit_field3(), true));
4156 } 4163 }
4157 4164
4158 4165
4159 bool Map::is_frozen() { 4166 bool Map::is_frozen() {
4160 return IsFrozen::decode(bit_field3()); 4167 return IsFrozen::decode(bit_field3());
4161 } 4168 }
4162 4169
4163 4170
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after
5044 ACCESSORS_TO_SMI(BreakPointInfo, source_position, kSourcePositionIndex) 5051 ACCESSORS_TO_SMI(BreakPointInfo, source_position, kSourcePositionIndex)
5045 ACCESSORS_TO_SMI(BreakPointInfo, statement_position, kStatementPositionIndex) 5052 ACCESSORS_TO_SMI(BreakPointInfo, statement_position, kStatementPositionIndex)
5046 ACCESSORS(BreakPointInfo, break_point_objects, Object, kBreakPointObjectsIndex) 5053 ACCESSORS(BreakPointInfo, break_point_objects, Object, kBreakPointObjectsIndex)
5047 5054
5048 ACCESSORS(SharedFunctionInfo, name, Object, kNameOffset) 5055 ACCESSORS(SharedFunctionInfo, name, Object, kNameOffset)
5049 ACCESSORS(SharedFunctionInfo, optimized_code_map, Object, 5056 ACCESSORS(SharedFunctionInfo, optimized_code_map, Object,
5050 kOptimizedCodeMapOffset) 5057 kOptimizedCodeMapOffset)
5051 ACCESSORS(SharedFunctionInfo, construct_stub, Code, kConstructStubOffset) 5058 ACCESSORS(SharedFunctionInfo, construct_stub, Code, kConstructStubOffset)
5052 ACCESSORS(SharedFunctionInfo, feedback_vector, FixedArray, 5059 ACCESSORS(SharedFunctionInfo, feedback_vector, FixedArray,
5053 kFeedbackVectorOffset) 5060 kFeedbackVectorOffset)
5054 ACCESSORS(SharedFunctionInfo, initial_map, Object, kInitialMapOffset)
5055 ACCESSORS(SharedFunctionInfo, instance_class_name, Object, 5061 ACCESSORS(SharedFunctionInfo, instance_class_name, Object,
5056 kInstanceClassNameOffset) 5062 kInstanceClassNameOffset)
5057 ACCESSORS(SharedFunctionInfo, function_data, Object, kFunctionDataOffset) 5063 ACCESSORS(SharedFunctionInfo, function_data, Object, kFunctionDataOffset)
5058 ACCESSORS(SharedFunctionInfo, script, Object, kScriptOffset) 5064 ACCESSORS(SharedFunctionInfo, script, Object, kScriptOffset)
5059 ACCESSORS(SharedFunctionInfo, debug_info, Object, kDebugInfoOffset) 5065 ACCESSORS(SharedFunctionInfo, debug_info, Object, kDebugInfoOffset)
5060 ACCESSORS(SharedFunctionInfo, inferred_name, String, kInferredNameOffset) 5066 ACCESSORS(SharedFunctionInfo, inferred_name, String, kInferredNameOffset)
5061 5067
5062 5068
5063 SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset) 5069 SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset)
5064 BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype, 5070 BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
5169 PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, 5175 PSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo,
5170 ast_node_count, 5176 ast_node_count,
5171 kAstNodeCountOffset) 5177 kAstNodeCountOffset)
5172 PSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, 5178 PSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo,
5173 profiler_ticks, 5179 profiler_ticks,
5174 kProfilerTicksOffset) 5180 kProfilerTicksOffset)
5175 5181
5176 #endif 5182 #endif
5177 5183
5178 5184
5179 int SharedFunctionInfo::construction_count() {
5180 return READ_BYTE_FIELD(this, kConstructionCountOffset);
5181 }
5182
5183
5184 void SharedFunctionInfo::set_construction_count(int value) {
5185 ASSERT(0 <= value && value < 256);
5186 WRITE_BYTE_FIELD(this, kConstructionCountOffset, static_cast<byte>(value));
5187 }
5188
5189
5190 BOOL_ACCESSORS(SharedFunctionInfo,
5191 compiler_hints,
5192 live_objects_may_exist,
5193 kLiveObjectsMayExist)
5194
5195
5196 bool SharedFunctionInfo::IsInobjectSlackTrackingInProgress() {
5197 return initial_map() != GetHeap()->undefined_value();
5198 }
5199
5200
5201 BOOL_GETTER(SharedFunctionInfo, 5185 BOOL_GETTER(SharedFunctionInfo,
5202 compiler_hints, 5186 compiler_hints,
5203 optimization_disabled, 5187 optimization_disabled,
5204 kOptimizationDisabled) 5188 kOptimizationDisabled)
5205 5189
5206 5190
5207 void SharedFunctionInfo::set_optimization_disabled(bool disable) { 5191 void SharedFunctionInfo::set_optimization_disabled(bool disable) {
5208 set_compiler_hints(BooleanBit::set(compiler_hints(), 5192 set_compiler_hints(BooleanBit::set(compiler_hints(),
5209 kOptimizationDisabled, 5193 kOptimizationDisabled,
5210 disable)); 5194 disable));
(...skipping 30 matching lines...) Expand all
5241 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_anonymous, kIsAnonymous) 5225 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_anonymous, kIsAnonymous)
5242 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_function, kIsFunction) 5226 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_function, kIsFunction)
5243 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_optimize, 5227 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_optimize,
5244 kDontOptimize) 5228 kDontOptimize)
5245 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_inline, kDontInline) 5229 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_inline, kDontInline)
5246 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_cache, kDontCache) 5230 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_cache, kDontCache)
5247 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_flush, kDontFlush) 5231 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_flush, kDontFlush)
5248 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_generator, kIsGenerator) 5232 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_generator, kIsGenerator)
5249 5233
5250 void SharedFunctionInfo::BeforeVisitingPointers() { 5234 void SharedFunctionInfo::BeforeVisitingPointers() {
5251 if (IsInobjectSlackTrackingInProgress()) DetachInitialMap();
5252 } 5235 }
5253 5236
5254 5237
5255 ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset) 5238 ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset)
5256 ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset) 5239 ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset)
5257 5240
5258 ACCESSORS(PolymorphicCodeCache, cache, Object, kCacheOffset) 5241 ACCESSORS(PolymorphicCodeCache, cache, Object, kCacheOffset)
5259 5242
5260 bool Script::HasValidSource() { 5243 bool Script::HasValidSource() {
5261 Object* src = this->source(); 5244 Object* src = this->source();
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
5466 Builtins::kCompileOptimizedConcurrent); 5449 Builtins::kCompileOptimizedConcurrent);
5467 } 5450 }
5468 5451
5469 5452
5470 bool JSFunction::IsInOptimizationQueue() { 5453 bool JSFunction::IsInOptimizationQueue() {
5471 return code() == GetIsolate()->builtins()->builtin( 5454 return code() == GetIsolate()->builtins()->builtin(
5472 Builtins::kInOptimizationQueue); 5455 Builtins::kInOptimizationQueue);
5473 } 5456 }
5474 5457
5475 5458
5459 bool JSFunction::IsInobjectSlackTrackingInProgress() {
5460 return has_initial_map() &&
5461 initial_map()->construction_count() != JSFunction::kNoSlackTracking;
5462 }
5463
5464
5476 Code* JSFunction::code() { 5465 Code* JSFunction::code() {
5477 return Code::cast( 5466 return Code::cast(
5478 Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset))); 5467 Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset)));
5479 } 5468 }
5480 5469
5481 5470
5482 void JSFunction::set_code(Code* value) { 5471 void JSFunction::set_code(Code* value) {
5483 ASSERT(!GetHeap()->InNewSpace(value)); 5472 ASSERT(!GetHeap()->InNewSpace(value));
5484 Address entry = value->entry(); 5473 Address entry = value->entry();
5485 WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry)); 5474 WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry));
(...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after
6860 #undef READ_SHORT_FIELD 6849 #undef READ_SHORT_FIELD
6861 #undef WRITE_SHORT_FIELD 6850 #undef WRITE_SHORT_FIELD
6862 #undef READ_BYTE_FIELD 6851 #undef READ_BYTE_FIELD
6863 #undef WRITE_BYTE_FIELD 6852 #undef WRITE_BYTE_FIELD
6864 #undef NOBARRIER_READ_BYTE_FIELD 6853 #undef NOBARRIER_READ_BYTE_FIELD
6865 #undef NOBARRIER_WRITE_BYTE_FIELD 6854 #undef NOBARRIER_WRITE_BYTE_FIELD
6866 6855
6867 } } // namespace v8::internal 6856 } } // namespace v8::internal
6868 6857
6869 #endif // V8_OBJECTS_INL_H_ 6858 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698