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

Side by Side Diff: runtime/vm/object.cc

Issue 2463083002: Remove default monomorphic check code from functions and stubs that do not need it. (Closed)
Patch Set: address comment Created 4 years, 1 month 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/become.h" 10 #include "vm/become.h"
(...skipping 11561 matching lines...) Expand 10 before | Expand all | Expand 10 after
11572 11572
11573 #undef CHECK_FACTORY_FINGERPRINTS 11573 #undef CHECK_FACTORY_FINGERPRINTS
11574 11574
11575 if (has_errors) { 11575 if (has_errors) {
11576 FATAL("Fingerprint mismatch."); 11576 FATAL("Fingerprint mismatch.");
11577 } 11577 }
11578 } 11578 }
11579 #endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT). 11579 #endif // defined(DART_NO_SNAPSHOT) && !defined(PRODUCT).
11580 11580
11581 11581
11582 RawInstructions* Instructions::New(intptr_t size) { 11582 RawInstructions* Instructions::New(intptr_t size, bool has_single_entry_point) {
11583 ASSERT(size >= 0);
11583 ASSERT(Object::instructions_class() != Class::null()); 11584 ASSERT(Object::instructions_class() != Class::null());
11584 if (size < 0 || size > kMaxElements) { 11585 if (size < 0 || size > kMaxElements) {
11585 // This should be caught before we reach here. 11586 // This should be caught before we reach here.
11586 FATAL1("Fatal error in Instructions::New: invalid size %" Pd "\n", size); 11587 FATAL1("Fatal error in Instructions::New: invalid size %" Pd "\n", size);
11587 } 11588 }
11588 Instructions& result = Instructions::Handle(); 11589 Instructions& result = Instructions::Handle();
11589 { 11590 {
11590 uword aligned_size = Instructions::InstanceSize(size); 11591 uword aligned_size = Instructions::InstanceSize(size);
11591 RawObject* raw = Object::Allocate(Instructions::kClassId, 11592 RawObject* raw = Object::Allocate(Instructions::kClassId,
11592 aligned_size, 11593 aligned_size,
11593 Heap::kCode); 11594 Heap::kCode);
11594 NoSafepointScope no_safepoint; 11595 NoSafepointScope no_safepoint;
11595 result ^= raw; 11596 result ^= raw;
11596 result.set_size(size); 11597 result.set_size(has_single_entry_point ? size : -size);
11597 } 11598 }
11598 return result.raw(); 11599 return result.raw();
11599 } 11600 }
11600 11601
11601 11602
11602 const char* Instructions::ToCString() const { 11603 const char* Instructions::ToCString() const {
11603 return "Instructions"; 11604 return "Instructions";
11604 } 11605 }
11605 11606
11606 11607
(...skipping 2650 matching lines...) Expand 10 before | Expand all | Expand 10 after
14257 ObjectPool::Handle(assembler->object_pool_wrapper().MakeObjectPool()); 14258 ObjectPool::Handle(assembler->object_pool_wrapper().MakeObjectPool());
14258 14259
14259 // Allocate the Code and Instructions objects. Code is allocated first 14260 // Allocate the Code and Instructions objects. Code is allocated first
14260 // because a GC during allocation of the code will leave the instruction 14261 // because a GC during allocation of the code will leave the instruction
14261 // pages read-only. 14262 // pages read-only.
14262 intptr_t pointer_offset_count = assembler->CountPointerOffsets(); 14263 intptr_t pointer_offset_count = assembler->CountPointerOffsets();
14263 Code& code = Code::ZoneHandle(Code::New(pointer_offset_count)); 14264 Code& code = Code::ZoneHandle(Code::New(pointer_offset_count));
14264 #ifdef TARGET_ARCH_IA32 14265 #ifdef TARGET_ARCH_IA32
14265 assembler->set_code_object(code); 14266 assembler->set_code_object(code);
14266 #endif 14267 #endif
14267 Instructions& instrs = 14268 Instructions& instrs = Instructions::ZoneHandle(
14268 Instructions::ZoneHandle(Instructions::New(assembler->CodeSize())); 14269 Instructions::New(assembler->CodeSize(),
14270 assembler->has_single_entry_point()));
14269 INC_STAT(Thread::Current(), total_instr_size, assembler->CodeSize()); 14271 INC_STAT(Thread::Current(), total_instr_size, assembler->CodeSize());
14270 INC_STAT(Thread::Current(), total_code_size, assembler->CodeSize()); 14272 INC_STAT(Thread::Current(), total_code_size, assembler->CodeSize());
14271 14273
14272 // Copy the instructions into the instruction area and apply all fixups. 14274 // Copy the instructions into the instruction area and apply all fixups.
14273 // Embedded pointers are still in handles at this point. 14275 // Embedded pointers are still in handles at this point.
14274 MemoryRegion region(reinterpret_cast<void*>(instrs.PayloadStart()), 14276 MemoryRegion region(reinterpret_cast<void*>(instrs.PayloadStart()),
14275 instrs.size()); 14277 instrs.size());
14276 assembler->FinalizeInstructions(region); 14278 assembler->FinalizeInstructions(region);
14277 CPU::FlushICache(instrs.PayloadStart(), instrs.size()); 14279 CPU::FlushICache(instrs.PayloadStart(), instrs.size());
14278 14280
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
14565 // frame slots which are marked as having objects. 14567 // frame slots which are marked as having objects.
14566 *maps = stackmaps(); 14568 *maps = stackmaps();
14567 *map = Stackmap::null(); 14569 *map = Stackmap::null();
14568 for (intptr_t i = 0; i < maps->Length(); i++) { 14570 for (intptr_t i = 0; i < maps->Length(); i++) {
14569 *map ^= maps->At(i); 14571 *map ^= maps->At(i);
14570 ASSERT(!map->IsNull()); 14572 ASSERT(!map->IsNull());
14571 if (map->PcOffset() == pc_offset) { 14573 if (map->PcOffset() == pc_offset) {
14572 return map->raw(); // We found a stack map for this frame. 14574 return map->raw(); // We found a stack map for this frame.
14573 } 14575 }
14574 } 14576 }
14575 ASSERT(!is_optimized() || (pc_offset == Instructions::kUncheckedEntryOffset)); 14577 // If we are missing a stack map, this must either be unoptimized code, or
14578 // the entry to an osr function. (In which case all stack slots are
14579 // considered to have tagged pointers.)
14580 // Running with --verify-on-transition should hit this.
14581 ASSERT(!is_optimized() ||
14582 (pc_offset == UncheckedEntryPoint() - PayloadStart()));
14576 return Stackmap::null(); 14583 return Stackmap::null();
14577 } 14584 }
14578 14585
14579 14586
14580 intptr_t Code::GetCallerId(intptr_t inlined_id) const { 14587 intptr_t Code::GetCallerId(intptr_t inlined_id) const {
14581 if (inlined_id < 0) { 14588 if (inlined_id < 0) {
14582 return -1; 14589 return -1;
14583 } 14590 }
14584 const Array& map = Array::Handle(GetInlinedCallerIdMap()); 14591 const Array& map = Array::Handle(GetInlinedCallerIdMap());
14585 if (map.IsNull() || (map.Length() == 0)) { 14592 if (map.IsNull() || (map.Length() == 0)) {
(...skipping 8442 matching lines...) Expand 10 before | Expand all | Expand 10 after
23028 return UserTag::null(); 23035 return UserTag::null();
23029 } 23036 }
23030 23037
23031 23038
23032 const char* UserTag::ToCString() const { 23039 const char* UserTag::ToCString() const {
23033 const String& tag_label = String::Handle(label()); 23040 const String& tag_label = String::Handle(label());
23034 return tag_label.ToCString(); 23041 return tag_label.ToCString();
23035 } 23042 }
23036 23043
23037 } // namespace dart 23044 } // namespace dart
OLDNEW
« runtime/vm/object.h ('K') | « runtime/vm/object.h ('k') | runtime/vm/object_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698