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

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

Issue 315583002: First step in reducing the size of PC descriptors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: addressed comments, added arm64 file. Created 6 years, 6 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 (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/cpu.h" 10 #include "vm/cpu.h"
(...skipping 10111 matching lines...) Expand 10 before | Expand all | Expand 10 after
10122 result ^= raw; 10122 result ^= raw;
10123 result.SetLength(num_descriptors); 10123 result.SetLength(num_descriptors);
10124 } 10124 }
10125 return result.raw(); 10125 return result.raw();
10126 } 10126 }
10127 10127
10128 10128
10129 const char* PcDescriptors::KindAsStr(intptr_t index) const { 10129 const char* PcDescriptors::KindAsStr(intptr_t index) const {
10130 switch (DescriptorKind(index)) { 10130 switch (DescriptorKind(index)) {
10131 case PcDescriptors::kDeopt: return "deopt "; 10131 case PcDescriptors::kDeopt: return "deopt ";
10132 case PcDescriptors::kEntryPatch: return "entry-patch ";
10133 case PcDescriptors::kPatchCode: return "patch ";
10134 case PcDescriptors::kLazyDeoptJump: return "lazy-deopt ";
10135 case PcDescriptors::kIcCall: return "ic-call "; 10132 case PcDescriptors::kIcCall: return "ic-call ";
10136 case PcDescriptors::kOptStaticCall: return "opt-call "; 10133 case PcDescriptors::kOptStaticCall: return "opt-call ";
10137 case PcDescriptors::kUnoptStaticCall: return "unopt-call "; 10134 case PcDescriptors::kUnoptStaticCall: return "unopt-call ";
10138 case PcDescriptors::kClosureCall: return "closure-call "; 10135 case PcDescriptors::kClosureCall: return "closure-call ";
10139 case PcDescriptors::kReturn: return "return "; 10136 case PcDescriptors::kReturn: return "return ";
10140 case PcDescriptors::kRuntimeCall: return "runtime-call "; 10137 case PcDescriptors::kRuntimeCall: return "runtime-call ";
10141 case PcDescriptors::kOsrEntry: return "osr-entry "; 10138 case PcDescriptors::kOsrEntry: return "osr-entry ";
10142 case PcDescriptors::kOther: return "other "; 10139 case PcDescriptors::kOther: return "other ";
10143 } 10140 }
10144 UNREACHABLE(); 10141 UNREACHABLE();
(...skipping 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after
11611 { 11608 {
11612 uword size = Code::InstanceSize(pointer_offsets_length); 11609 uword size = Code::InstanceSize(pointer_offsets_length);
11613 RawObject* raw = Object::Allocate(Code::kClassId, size, Heap::kOld); 11610 RawObject* raw = Object::Allocate(Code::kClassId, size, Heap::kOld);
11614 NoGCScope no_gc; 11611 NoGCScope no_gc;
11615 result ^= raw; 11612 result ^= raw;
11616 result.set_pointer_offsets_length(pointer_offsets_length); 11613 result.set_pointer_offsets_length(pointer_offsets_length);
11617 result.set_is_optimized(false); 11614 result.set_is_optimized(false);
11618 result.set_is_alive(false); 11615 result.set_is_alive(false);
11619 result.set_comments(Comments::New(0)); 11616 result.set_comments(Comments::New(0));
11620 result.set_compile_timestamp(0); 11617 result.set_compile_timestamp(0);
11618 result.set_entry_patch_pc_offset(kInvalidPc);
11619 result.set_patch_code_pc_offset(kInvalidPc);
11620 result.set_lazy_deopt_pc_offset(kInvalidPc);
11621 result.set_pc_descriptors(Object::empty_descriptors()); 11621 result.set_pc_descriptors(Object::empty_descriptors());
11622 } 11622 }
11623 return result.raw(); 11623 return result.raw();
11624 } 11624 }
11625 11625
11626 11626
11627 RawCode* Code::FinalizeCode(const char* name, 11627 RawCode* Code::FinalizeCode(const char* name,
11628 Assembler* assembler, 11628 Assembler* assembler,
11629 bool optimized) { 11629 bool optimized) {
11630 ASSERT(assembler != NULL); 11630 ASSERT(assembler != NULL);
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
11890 } 11890 }
11891 } 11891 }
11892 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); 11892 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
11893 if (!descriptors.IsNull()) { 11893 if (!descriptors.IsNull()) {
11894 JSONObject desc(&jsobj, "descriptors"); 11894 JSONObject desc(&jsobj, "descriptors");
11895 descriptors.PrintToJSONObject(&desc); 11895 descriptors.PrintToJSONObject(&desc);
11896 } 11896 }
11897 } 11897 }
11898 11898
11899 11899
11900 uword Code::GetEntryPatchPc() const {
11901 return (entry_patch_pc_offset() != kInvalidPc)
11902 ? EntryPoint() + entry_patch_pc_offset() : 0;
11903 }
11904
11905
11900 uword Code::GetPatchCodePc() const { 11906 uword Code::GetPatchCodePc() const {
11901 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); 11907 return (patch_code_pc_offset() != kInvalidPc)
11902 return descriptors.GetPcForKind(PcDescriptors::kPatchCode); 11908 ? EntryPoint() + patch_code_pc_offset() : 0;
11903 } 11909 }
11904 11910
11905 11911
11906 uword Code::GetLazyDeoptPc() const { 11912 uword Code::GetLazyDeoptPc() const {
11907 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); 11913 return (lazy_deopt_pc_offset() != kInvalidPc)
11908 return descriptors.GetPcForKind(PcDescriptors::kLazyDeoptJump); 11914 ? EntryPoint() + lazy_deopt_pc_offset() : 0;
11909 } 11915 }
11910 11916
11911 11917
11912 bool Code::ObjectExistsInArea(intptr_t start_offset, 11918 bool Code::ObjectExistsInArea(intptr_t start_offset,
11913 intptr_t end_offset) const { 11919 intptr_t end_offset) const {
11914 for (intptr_t i = 0; i < this->pointer_offsets_length(); i++) { 11920 for (intptr_t i = 0; i < this->pointer_offsets_length(); i++) {
11915 const intptr_t offset = this->GetPointerOffsetAt(i); 11921 const intptr_t offset = this->GetPointerOffsetAt(i);
11916 if ((start_offset <= offset) && (offset < end_offset)) { 11922 if ((start_offset <= offset) && (offset < end_offset)) {
11917 return false; 11923 return false;
11918 } 11924 }
(...skipping 7064 matching lines...) Expand 10 before | Expand all | Expand 10 after
18983 return tag_label.ToCString(); 18989 return tag_label.ToCString();
18984 } 18990 }
18985 18991
18986 18992
18987 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 18993 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
18988 Instance::PrintJSONImpl(stream, ref); 18994 Instance::PrintJSONImpl(stream, ref);
18989 } 18995 }
18990 18996
18991 18997
18992 } // namespace dart 18998 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/raw_object.h » ('j') | runtime/vm/raw_object.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698