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

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

Issue 17421003: Store arguments descriptor in ICData. Remove loading of arguments descriptor at unoptimized call si… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/object.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 (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 #ifndef VM_OBJECT_H_ 5 #ifndef VM_OBJECT_H_
6 #define VM_OBJECT_H_ 6 #define VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 3165 matching lines...) Expand 10 before | Expand all | Expand 10 after
3176 class ICData : public Object { 3176 class ICData : public Object {
3177 public: 3177 public:
3178 RawFunction* function() const { 3178 RawFunction* function() const {
3179 return raw_ptr()->function_; 3179 return raw_ptr()->function_;
3180 } 3180 }
3181 3181
3182 RawString* target_name() const { 3182 RawString* target_name() const {
3183 return raw_ptr()->target_name_; 3183 return raw_ptr()->target_name_;
3184 } 3184 }
3185 3185
3186 RawArray* arguments_descriptor() const {
3187 return raw_ptr()->args_descriptor_;
3188 }
3189
3186 intptr_t num_args_tested() const { 3190 intptr_t num_args_tested() const {
3187 return raw_ptr()->num_args_tested_; 3191 return raw_ptr()->num_args_tested_;
3188 } 3192 }
3189 3193
3190 intptr_t deopt_id() const { 3194 intptr_t deopt_id() const {
3191 return raw_ptr()->deopt_id_; 3195 return raw_ptr()->deopt_id_;
3192 } 3196 }
3193 3197
3194 intptr_t deopt_reason() const { 3198 intptr_t deopt_reason() const {
3195 return raw_ptr()->deopt_reason_; 3199 return raw_ptr()->deopt_reason_;
(...skipping 14 matching lines...) Expand all
3210 } 3214 }
3211 3215
3212 static intptr_t target_name_offset() { 3216 static intptr_t target_name_offset() {
3213 return OFFSET_OF(RawICData, target_name_); 3217 return OFFSET_OF(RawICData, target_name_);
3214 } 3218 }
3215 3219
3216 static intptr_t num_args_tested_offset() { 3220 static intptr_t num_args_tested_offset() {
3217 return OFFSET_OF(RawICData, num_args_tested_); 3221 return OFFSET_OF(RawICData, num_args_tested_);
3218 } 3222 }
3219 3223
3224 static intptr_t arguments_descriptor_offset() {
3225 return OFFSET_OF(RawICData, args_descriptor_);
3226 }
3227
3220 static intptr_t ic_data_offset() { 3228 static intptr_t ic_data_offset() {
3221 return OFFSET_OF(RawICData, ic_data_); 3229 return OFFSET_OF(RawICData, ic_data_);
3222 } 3230 }
3223 3231
3224 static intptr_t function_offset() { 3232 static intptr_t function_offset() {
3225 return OFFSET_OF(RawICData, function_); 3233 return OFFSET_OF(RawICData, function_);
3226 } 3234 }
3227 3235
3228 static intptr_t is_closure_call_offset() { 3236 static intptr_t is_closure_call_offset() {
3229 return OFFSET_OF(RawICData, is_closure_call_); 3237 return OFFSET_OF(RawICData, is_closure_call_);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3267 return AsUnaryClassChecksForArgNr(0); 3275 return AsUnaryClassChecksForArgNr(0);
3268 } 3276 }
3269 3277
3270 bool AllTargetsHaveSameOwner(intptr_t owner_cid) const; 3278 bool AllTargetsHaveSameOwner(intptr_t owner_cid) const;
3271 bool AllReceiversAreNumbers() const; 3279 bool AllReceiversAreNumbers() const;
3272 bool HasOneTarget() const; 3280 bool HasOneTarget() const;
3273 bool HasReceiverClassId(intptr_t class_id) const; 3281 bool HasReceiverClassId(intptr_t class_id) const;
3274 3282
3275 static RawICData* New(const Function& caller_function, 3283 static RawICData* New(const Function& caller_function,
3276 const String& target_name, 3284 const String& target_name,
3285 const Array& arguments_descriptor,
3277 intptr_t deopt_id, 3286 intptr_t deopt_id,
3278 intptr_t num_args_tested); 3287 intptr_t num_args_tested);
3279 3288
3280 static intptr_t TestEntryLengthFor(intptr_t num_args); 3289 static intptr_t TestEntryLengthFor(intptr_t num_args);
3281 3290
3282 static intptr_t TargetIndexFor(intptr_t num_args) { 3291 static intptr_t TargetIndexFor(intptr_t num_args) {
3283 return num_args; 3292 return num_args;
3284 } 3293 }
3285 3294
3286 static intptr_t CountIndexFor(intptr_t num_args) { 3295 static intptr_t CountIndexFor(intptr_t num_args) {
3287 return (num_args + 1); 3296 return (num_args + 1);
3288 } 3297 }
3289 3298
3290 private: 3299 private:
3291 RawArray* ic_data() const { 3300 RawArray* ic_data() const {
3292 return raw_ptr()->ic_data_; 3301 return raw_ptr()->ic_data_;
3293 } 3302 }
3294 3303
3295 void set_function(const Function& value) const; 3304 void set_function(const Function& value) const;
3296 void set_target_name(const String& value) const; 3305 void set_target_name(const String& value) const;
3306 void set_arguments_descriptor(const Array& value) const;
3297 void set_deopt_id(intptr_t value) const; 3307 void set_deopt_id(intptr_t value) const;
3298 void set_num_args_tested(intptr_t value) const; 3308 void set_num_args_tested(intptr_t value) const;
3299 void set_ic_data(const Array& value) const; 3309 void set_ic_data(const Array& value) const;
3300 3310
3301 #if defined(DEBUG) 3311 #if defined(DEBUG)
3302 // Used in asserts to verify that a check is not added twice. 3312 // Used in asserts to verify that a check is not added twice.
3303 bool HasCheck(const GrowableArray<intptr_t>& cids) const; 3313 bool HasCheck(const GrowableArray<intptr_t>& cids) const;
3304 #endif // DEBUG 3314 #endif // DEBUG
3305 3315
3306 intptr_t TestEntryLength() const; 3316 intptr_t TestEntryLength() const;
(...skipping 2614 matching lines...) Expand 10 before | Expand all | Expand 10 after
5921 5931
5922 5932
5923 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 5933 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
5924 intptr_t index) { 5934 intptr_t index) {
5925 return array.At((index * kEntryLength) + kTargetFunctionIndex); 5935 return array.At((index * kEntryLength) + kTargetFunctionIndex);
5926 } 5936 }
5927 5937
5928 } // namespace dart 5938 } // namespace dart
5929 5939
5930 #endif // VM_OBJECT_H_ 5940 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_x64.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698