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

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

Issue 2490363002: Clean up encoding of size and single entry flag in Instructions. (Closed)
Patch Set: 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
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/precompiler.h » ('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 (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 11366 matching lines...) Expand 10 before | Expand all | Expand 10 after
11377 // This should be caught before we reach here. 11377 // This should be caught before we reach here.
11378 FATAL1("Fatal error in Instructions::New: invalid size %" Pd "\n", size); 11378 FATAL1("Fatal error in Instructions::New: invalid size %" Pd "\n", size);
11379 } 11379 }
11380 Instructions& result = Instructions::Handle(); 11380 Instructions& result = Instructions::Handle();
11381 { 11381 {
11382 uword aligned_size = Instructions::InstanceSize(size); 11382 uword aligned_size = Instructions::InstanceSize(size);
11383 RawObject* raw = 11383 RawObject* raw =
11384 Object::Allocate(Instructions::kClassId, aligned_size, Heap::kCode); 11384 Object::Allocate(Instructions::kClassId, aligned_size, Heap::kCode);
11385 NoSafepointScope no_safepoint; 11385 NoSafepointScope no_safepoint;
11386 result ^= raw; 11386 result ^= raw;
11387 result.set_size(has_single_entry_point ? size : -size); 11387 result.SetSize(size);
11388 result.SetHasSingleEntryPoint(has_single_entry_point);
11388 } 11389 }
11389 return result.raw(); 11390 return result.raw();
11390 } 11391 }
11391 11392
11392 11393
11393 const char* Instructions::ToCString() const { 11394 const char* Instructions::ToCString() const {
11394 return "Instructions"; 11395 return "Instructions";
11395 } 11396 }
11396 11397
11397 11398
(...skipping 2359 matching lines...) Expand 10 before | Expand all | Expand 10 after
13757 13758
13758 13759
13759 void Code::Disassemble(DisassemblyFormatter* formatter) const { 13760 void Code::Disassemble(DisassemblyFormatter* formatter) const {
13760 #ifndef PRODUCT 13761 #ifndef PRODUCT
13761 if (!FLAG_support_disassembler) { 13762 if (!FLAG_support_disassembler) {
13762 return; 13763 return;
13763 } 13764 }
13764 const Instructions& instr = Instructions::Handle(instructions()); 13765 const Instructions& instr = Instructions::Handle(instructions());
13765 uword start = instr.PayloadStart(); 13766 uword start = instr.PayloadStart();
13766 if (formatter == NULL) { 13767 if (formatter == NULL) {
13767 Disassembler::Disassemble(start, start + instr.size(), *this); 13768 Disassembler::Disassemble(start, start + instr.Size(), *this);
13768 } else { 13769 } else {
13769 Disassembler::Disassemble(start, start + instr.size(), formatter, *this); 13770 Disassembler::Disassemble(start, start + instr.Size(), formatter, *this);
13770 } 13771 }
13771 #endif 13772 #endif
13772 } 13773 }
13773 13774
13774 13775
13775 const Code::Comments& Code::comments() const { 13776 const Code::Comments& Code::comments() const {
13776 #if defined(DART_PRECOMPILED_RUNTIME) 13777 #if defined(DART_PRECOMPILED_RUNTIME)
13777 Comments* comments = new Code::Comments(Array::Handle()); 13778 Comments* comments = new Code::Comments(Array::Handle());
13778 #else 13779 #else
13779 Comments* comments = new Code::Comments(Array::Handle(raw_ptr()->comments_)); 13780 Comments* comments = new Code::Comments(Array::Handle(raw_ptr()->comments_));
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
13988 assembler->set_code_object(code); 13989 assembler->set_code_object(code);
13989 #endif 13990 #endif
13990 Instructions& instrs = Instructions::ZoneHandle(Instructions::New( 13991 Instructions& instrs = Instructions::ZoneHandle(Instructions::New(
13991 assembler->CodeSize(), assembler->has_single_entry_point())); 13992 assembler->CodeSize(), assembler->has_single_entry_point()));
13992 INC_STAT(Thread::Current(), total_instr_size, assembler->CodeSize()); 13993 INC_STAT(Thread::Current(), total_instr_size, assembler->CodeSize());
13993 INC_STAT(Thread::Current(), total_code_size, assembler->CodeSize()); 13994 INC_STAT(Thread::Current(), total_code_size, assembler->CodeSize());
13994 13995
13995 // Copy the instructions into the instruction area and apply all fixups. 13996 // Copy the instructions into the instruction area and apply all fixups.
13996 // Embedded pointers are still in handles at this point. 13997 // Embedded pointers are still in handles at this point.
13997 MemoryRegion region(reinterpret_cast<void*>(instrs.PayloadStart()), 13998 MemoryRegion region(reinterpret_cast<void*>(instrs.PayloadStart()),
13998 instrs.size()); 13999 instrs.Size());
13999 assembler->FinalizeInstructions(region); 14000 assembler->FinalizeInstructions(region);
14000 CPU::FlushICache(instrs.PayloadStart(), instrs.size()); 14001 CPU::FlushICache(instrs.PayloadStart(), instrs.Size());
14001 14002
14002 code.set_compile_timestamp(OS::GetCurrentMonotonicMicros()); 14003 code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
14003 #ifndef PRODUCT 14004 #ifndef PRODUCT
14004 CodeObservers::NotifyAll(name, instrs.PayloadStart(), 14005 CodeObservers::NotifyAll(name, instrs.PayloadStart(),
14005 assembler->prologue_offset(), instrs.size(), 14006 assembler->prologue_offset(), instrs.Size(),
14006 optimized); 14007 optimized);
14007 #endif 14008 #endif
14008 { 14009 {
14009 NoSafepointScope no_safepoint; 14010 NoSafepointScope no_safepoint;
14010 const ZoneGrowableArray<intptr_t>& pointer_offsets = 14011 const ZoneGrowableArray<intptr_t>& pointer_offsets =
14011 assembler->GetPointerOffsets(); 14012 assembler->GetPointerOffsets();
14012 ASSERT(pointer_offsets.length() == pointer_offset_count); 14013 ASSERT(pointer_offsets.length() == pointer_offset_count);
14013 ASSERT(code.pointer_offsets_length() == pointer_offsets.length()); 14014 ASSERT(code.pointer_offsets_length() == pointer_offsets.length());
14014 14015
14015 // Set pointer offsets list in Code object and resolve all handles in 14016 // Set pointer offsets list in Code object and resolve all handles in
(...skipping 8612 matching lines...) Expand 10 before | Expand all | Expand 10 after
22628 return UserTag::null(); 22629 return UserTag::null();
22629 } 22630 }
22630 22631
22631 22632
22632 const char* UserTag::ToCString() const { 22633 const char* UserTag::ToCString() const {
22633 const String& tag_label = String::Handle(label()); 22634 const String& tag_label = String::Handle(label());
22634 return tag_label.ToCString(); 22635 return tag_label.ToCString();
22635 } 22636 }
22636 22637
22637 } // namespace dart 22638 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/precompiler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698