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

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

Issue 12385014: Hydrogen stubs for array constructors (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: With all ports done Created 7 years, 8 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 void JSObject::ValidateElements() { 1291 void JSObject::ValidateElements() {
1292 #if DEBUG 1292 #if DEBUG
1293 if (FLAG_enable_slow_asserts) { 1293 if (FLAG_enable_slow_asserts) {
1294 ElementsAccessor* accessor = GetElementsAccessor(); 1294 ElementsAccessor* accessor = GetElementsAccessor();
1295 accessor->Validate(this); 1295 accessor->Validate(this);
1296 } 1296 }
1297 #endif 1297 #endif
1298 } 1298 }
1299 1299
1300 1300
1301 bool JSObject::ShouldTrackAllocationInfo() {
1302 if (map()->CanTrackAllocationSite()) {
1303 if (!IsJSArray()) {
1304 return true;
1305 }
1306
1307 return AllocationSiteInfo::GetMode(GetElementsKind()) ==
1308 TRACK_ALLOCATION_SITE;
1309 }
1310 return false;
1311 }
1312
1313
1314 // Heuristic: We only need to create allocation site info if the boilerplate
1315 // elements kind is the initial elements kind.
1316 AllocationSiteMode AllocationSiteInfo::GetMode(
1317 ElementsKind boilerplate_elements_kind) {
1318 if (FLAG_track_allocation_sites &&
1319 IsFastSmiElementsKind(boilerplate_elements_kind)) {
1320 return TRACK_ALLOCATION_SITE;
1321 }
1322
1323 return DONT_TRACK_ALLOCATION_SITE;
1324 }
1325
1326
1327 AllocationSiteMode AllocationSiteInfo::GetMode(ElementsKind from,
1328 ElementsKind to) {
1329 if (FLAG_track_allocation_sites &&
1330 IsFastSmiElementsKind(from) &&
1331 (IsFastObjectElementsKind(to) || IsFastDoubleElementsKind(to))) {
1332 return TRACK_ALLOCATION_SITE;
1333 }
1334
1335 return DONT_TRACK_ALLOCATION_SITE;
1336 }
1337
1338
1301 MaybeObject* JSObject::EnsureCanContainHeapObjectElements() { 1339 MaybeObject* JSObject::EnsureCanContainHeapObjectElements() {
1302 ValidateElements(); 1340 ValidateElements();
1303 ElementsKind elements_kind = map()->elements_kind(); 1341 ElementsKind elements_kind = map()->elements_kind();
1304 if (!IsFastObjectElementsKind(elements_kind)) { 1342 if (!IsFastObjectElementsKind(elements_kind)) {
1305 if (IsFastHoleyElementsKind(elements_kind)) { 1343 if (IsFastHoleyElementsKind(elements_kind)) {
1306 return TransitionElementsKind(FAST_HOLEY_ELEMENTS); 1344 return TransitionElementsKind(FAST_HOLEY_ELEMENTS);
1307 } else { 1345 } else {
1308 return TransitionElementsKind(FAST_ELEMENTS); 1346 return TransitionElementsKind(FAST_ELEMENTS);
1309 } 1347 }
1310 } 1348 }
(...skipping 2356 matching lines...) Expand 10 before | Expand all | Expand 10 after
3667 kind() == KEYED_STORE_IC || 3705 kind() == KEYED_STORE_IC ||
3668 kind() == TO_BOOLEAN_IC); 3706 kind() == TO_BOOLEAN_IC);
3669 ASSERT(0 <= major && major < 256); 3707 ASSERT(0 <= major && major < 256);
3670 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 3708 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset);
3671 int updated = StubMajorKeyField::update(previous, major); 3709 int updated = StubMajorKeyField::update(previous, major);
3672 WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 3710 WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated);
3673 } 3711 }
3674 3712
3675 3713
3676 bool Code::is_pregenerated() { 3714 bool Code::is_pregenerated() {
3677 return kind() == STUB && IsPregeneratedField::decode(flags()); 3715 return (kind() == STUB || kind() == COMPILED_STUB)
3716 && IsPregeneratedField::decode(flags());
3678 } 3717 }
3679 3718
3680 3719
3681 void Code::set_is_pregenerated(bool value) { 3720 void Code::set_is_pregenerated(bool value) {
3682 ASSERT(kind() == STUB); 3721 ASSERT(kind() == STUB || kind() == COMPILED_STUB);
3683 Flags f = flags(); 3722 Flags f = flags();
3684 f = static_cast<Flags>(IsPregeneratedField::update(f, value)); 3723 f = static_cast<Flags>(IsPregeneratedField::update(f, value));
3685 set_flags(f); 3724 set_flags(f);
3686 } 3725 }
3687 3726
3688 3727
3689 bool Code::optimizable() { 3728 bool Code::optimizable() {
3690 ASSERT_EQ(FUNCTION, kind()); 3729 ASSERT_EQ(FUNCTION, kind());
3691 return READ_BYTE_FIELD(this, kOptimizableOffset) == 1; 3730 return READ_BYTE_FIELD(this, kOptimizableOffset) == 1;
3692 } 3731 }
(...skipping 2405 matching lines...) Expand 10 before | Expand all | Expand 10 after
6098 #undef WRITE_UINT32_FIELD 6137 #undef WRITE_UINT32_FIELD
6099 #undef READ_SHORT_FIELD 6138 #undef READ_SHORT_FIELD
6100 #undef WRITE_SHORT_FIELD 6139 #undef WRITE_SHORT_FIELD
6101 #undef READ_BYTE_FIELD 6140 #undef READ_BYTE_FIELD
6102 #undef WRITE_BYTE_FIELD 6141 #undef WRITE_BYTE_FIELD
6103 6142
6104 6143
6105 } } // namespace v8::internal 6144 } } // namespace v8::internal
6106 6145
6107 #endif // V8_OBJECTS_INL_H_ 6146 #endif // V8_OBJECTS_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698