OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_STUB_CACHE_H_ | 5 #ifndef V8_STUB_CACHE_H_ |
6 #define V8_STUB_CACHE_H_ | 6 #define V8_STUB_CACHE_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 | 384 |
385 virtual Register FrontendHeader(Register object_reg, Handle<Name> name, | 385 virtual Register FrontendHeader(Register object_reg, Handle<Name> name, |
386 Label* miss) { | 386 Label* miss) { |
387 UNREACHABLE(); | 387 UNREACHABLE(); |
388 return receiver(); | 388 return receiver(); |
389 } | 389 } |
390 | 390 |
391 virtual void FrontendFooter(Handle<Name> name, Label* miss) { UNREACHABLE(); } | 391 virtual void FrontendFooter(Handle<Name> name, Label* miss) { UNREACHABLE(); } |
392 | 392 |
393 Register Frontend(Register object_reg, Handle<Name> name); | 393 Register Frontend(Register object_reg, Handle<Name> name); |
| 394 void NonexistentFrontend(Handle<Name> name, Register scratch1, |
| 395 Register scratch2); |
394 | 396 |
395 // TODO(verwaest): Make non-static. | 397 // TODO(verwaest): Make non-static. |
396 static void GenerateFastApiCall(MacroAssembler* masm, | 398 static void GenerateFastApiCall(MacroAssembler* masm, |
397 const CallOptimization& optimization, | 399 const CallOptimization& optimization, |
398 Handle<Map> receiver_map, Register receiver, | 400 Handle<Map> receiver_map, Register receiver, |
399 Register scratch, bool is_store, int argc, | 401 Register scratch, bool is_store, int argc, |
400 Register* values); | 402 Register* values); |
401 | 403 |
402 // Helper function used to check that the dictionary doesn't contain | 404 // Helper function used to check that the dictionary doesn't contain |
403 // the property. This function may return false negatives, so miss_label | 405 // the property. This function may return false negatives, so miss_label |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 protected: | 514 protected: |
513 virtual Register FrontendHeader(Register object_reg, Handle<Name> name, | 515 virtual Register FrontendHeader(Register object_reg, Handle<Name> name, |
514 Label* miss); | 516 Label* miss); |
515 | 517 |
516 virtual void FrontendFooter(Handle<Name> name, Label* miss); | 518 virtual void FrontendFooter(Handle<Name> name, Label* miss); |
517 | 519 |
518 private: | 520 private: |
519 Register CallbackFrontend(Register object_reg, Handle<Name> name, | 521 Register CallbackFrontend(Register object_reg, Handle<Name> name, |
520 Handle<Object> callback); | 522 Handle<Object> callback); |
521 Handle<Code> CompileLoadNonexistent(Handle<Name> name); | 523 Handle<Code> CompileLoadNonexistent(Handle<Name> name); |
522 void NonexistentFrontend(Handle<Name> name); | |
523 | |
524 void GenerateLoadField(Register reg, | 524 void GenerateLoadField(Register reg, |
525 FieldIndex field, | 525 FieldIndex field, |
526 Representation representation); | 526 Representation representation); |
527 void GenerateLoadConstant(Handle<Object> value); | 527 void GenerateLoadConstant(Handle<Object> value); |
528 void GenerateLoadCallback(Register reg, | 528 void GenerateLoadCallback(Register reg, |
529 Handle<ExecutableAccessorInfo> callback); | 529 Handle<ExecutableAccessorInfo> callback); |
530 void GenerateLoadCallback(const CallOptimization& call_optimization, | 530 void GenerateLoadCallback(const CallOptimization& call_optimization, |
531 Handle<Map> receiver_map); | 531 Handle<Map> receiver_map); |
532 void GenerateLoadInterceptor(Register holder_reg, | 532 void GenerateLoadInterceptor(Register holder_reg, |
533 LookupResult* lookup, | 533 LookupResult* lookup, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 } | 582 } |
583 | 583 |
584 protected: | 584 protected: |
585 virtual Register FrontendHeader(Register object_reg, Handle<Name> name, | 585 virtual Register FrontendHeader(Register object_reg, Handle<Name> name, |
586 Label* miss); | 586 Label* miss); |
587 | 587 |
588 virtual void FrontendFooter(Handle<Name> name, Label* miss); | 588 virtual void FrontendFooter(Handle<Name> name, Label* miss); |
589 void GenerateRestoreName(Label* label, Handle<Name> name); | 589 void GenerateRestoreName(Label* label, Handle<Name> name); |
590 | 590 |
591 private: | 591 private: |
592 void GenerateNegativeHolderLookup(Register holder_reg, Handle<Name> name, | |
593 Label* miss); | |
594 | |
595 void GenerateStoreTransition(Handle<Map> transition, Handle<Name> name, | 592 void GenerateStoreTransition(Handle<Map> transition, Handle<Name> name, |
596 Register receiver_reg, Register name_reg, | 593 Register receiver_reg, Register name_reg, |
597 Register value_reg, Register scratch1, | 594 Register value_reg, Register scratch1, |
598 Register scratch2, Register scratch3, | 595 Register scratch2, Register scratch3, |
599 Label* miss_label, Label* slow); | 596 Label* miss_label, Label* slow); |
600 | 597 |
601 void GenerateStoreField(Handle<JSObject> object, LookupResult* lookup, | 598 void GenerateStoreField(Handle<JSObject> object, LookupResult* lookup, |
602 Register receiver_reg, Register name_reg, | 599 Register receiver_reg, Register name_reg, |
603 Register value_reg, Register scratch1, | 600 Register value_reg, Register scratch1, |
604 Register scratch2, Label* miss_label); | 601 Register scratch2, Label* miss_label); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 Handle<JSFunction> constant_function_; | 683 Handle<JSFunction> constant_function_; |
687 bool is_simple_api_call_; | 684 bool is_simple_api_call_; |
688 Handle<FunctionTemplateInfo> expected_receiver_type_; | 685 Handle<FunctionTemplateInfo> expected_receiver_type_; |
689 Handle<CallHandlerInfo> api_call_info_; | 686 Handle<CallHandlerInfo> api_call_info_; |
690 }; | 687 }; |
691 | 688 |
692 | 689 |
693 } } // namespace v8::internal | 690 } } // namespace v8::internal |
694 | 691 |
695 #endif // V8_STUB_CACHE_H_ | 692 #endif // V8_STUB_CACHE_H_ |
OLD | NEW |