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

Side by Side Diff: src/code-stubs.h

Issue 272513004: Reland r20974: Unify and simplify the FastCloneShallowArrayStub (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: This time it will work! Created 6 years, 7 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 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_CODE_STUBS_H_ 5 #ifndef V8_CODE_STUBS_H_
6 #define V8_CODE_STUBS_H_ 6 #define V8_CODE_STUBS_H_
7 7
8 #include "allocation.h" 8 #include "allocation.h"
9 #include "assembler.h" 9 #include "assembler.h"
10 #include "codegen.h" 10 #include "codegen.h"
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 struct CodeStubInterfaceDescriptor { 270 struct CodeStubInterfaceDescriptor {
271 CodeStubInterfaceDescriptor(); 271 CodeStubInterfaceDescriptor();
272 int register_param_count_; 272 int register_param_count_;
273 273
274 Register stack_parameter_count_; 274 Register stack_parameter_count_;
275 // if hint_stack_parameter_count_ > 0, the code stub can optimize the 275 // if hint_stack_parameter_count_ > 0, the code stub can optimize the
276 // return sequence. Default value is -1, which means it is ignored. 276 // return sequence. Default value is -1, which means it is ignored.
277 int hint_stack_parameter_count_; 277 int hint_stack_parameter_count_;
278 StubFunctionMode function_mode_; 278 StubFunctionMode function_mode_;
279 Register* register_params_; 279 Register* register_params_;
280 // Specifies Representations for the stub's parameter. Points to an array of
281 // Representations of the same length of the numbers of parameters to the
282 // stub, or if NULL (the default value), Representation of each parameter
283 // assumed to be Tagged()
284 Representation* register_param_representations_;
280 285
281 Address deoptimization_handler_; 286 Address deoptimization_handler_;
282 HandlerArgumentsMode handler_arguments_mode_; 287 HandlerArgumentsMode handler_arguments_mode_;
283 288
284 bool initialized() const { return register_param_count_ >= 0; } 289 bool initialized() const { return register_param_count_ >= 0; }
285 290
286 int environment_length() const { 291 int environment_length() const {
287 return register_param_count_; 292 return register_param_count_;
288 } 293 }
289 294
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 static const int kFunction = 0; 579 static const int kFunction = 0;
575 580
576 private: 581 private:
577 int slots_; 582 int slots_;
578 }; 583 };
579 584
580 585
581 class FastCloneShallowArrayStub : public HydrogenCodeStub { 586 class FastCloneShallowArrayStub : public HydrogenCodeStub {
582 public: 587 public:
583 // Maximum length of copied elements array. 588 // Maximum length of copied elements array.
584 static const int kMaximumClonedLength = 8; 589 static const int kMaximumInlinedCloneLength = 8;
585 enum Mode {
586 CLONE_ELEMENTS,
587 CLONE_DOUBLE_ELEMENTS,
588 COPY_ON_WRITE_ELEMENTS,
589 CLONE_ANY_ELEMENTS,
590 LAST_CLONE_MODE = CLONE_ANY_ELEMENTS
591 };
592
593 static const int kFastCloneModeCount = LAST_CLONE_MODE + 1;
594 590
595 FastCloneShallowArrayStub(Isolate* isolate, 591 FastCloneShallowArrayStub(Isolate* isolate,
596 Mode mode, 592 AllocationSiteMode allocation_site_mode)
597 AllocationSiteMode allocation_site_mode,
598 int length)
599 : HydrogenCodeStub(isolate), 593 : HydrogenCodeStub(isolate),
600 mode_(mode), 594 allocation_site_mode_(allocation_site_mode) {}
601 allocation_site_mode_(allocation_site_mode),
602 length_((mode == COPY_ON_WRITE_ELEMENTS) ? 0 : length) {
603 ASSERT_GE(length_, 0);
604 ASSERT_LE(length_, kMaximumClonedLength);
605 }
606 595
607 Mode mode() const { return mode_; }
608 int length() const { return length_; }
609 AllocationSiteMode allocation_site_mode() const { 596 AllocationSiteMode allocation_site_mode() const {
610 return allocation_site_mode_; 597 return allocation_site_mode_;
611 } 598 }
612 599
613 ElementsKind ComputeElementsKind() const { 600 virtual Handle<Code> GenerateCode();
614 switch (mode()) {
615 case CLONE_ELEMENTS:
616 case COPY_ON_WRITE_ELEMENTS:
617 return FAST_ELEMENTS;
618 case CLONE_DOUBLE_ELEMENTS:
619 return FAST_DOUBLE_ELEMENTS;
620 case CLONE_ANY_ELEMENTS:
621 /*fall-through*/;
622 }
623 UNREACHABLE();
624 return LAST_ELEMENTS_KIND;
625 }
626
627 virtual Handle<Code> GenerateCode() V8_OVERRIDE;
628 601
629 virtual void InitializeInterfaceDescriptor( 602 virtual void InitializeInterfaceDescriptor(
630 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; 603 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
631 604
632 static void InstallDescriptors(Isolate* isolate); 605 static void InstallDescriptors(Isolate* isolate);
633 606
634 private: 607 private:
635 Mode mode_;
636 AllocationSiteMode allocation_site_mode_; 608 AllocationSiteMode allocation_site_mode_;
637 int length_;
638 609
639 class AllocationSiteModeBits: public BitField<AllocationSiteMode, 0, 1> {}; 610 class AllocationSiteModeBits: public BitField<AllocationSiteMode, 0, 1> {};
640 class ModeBits: public BitField<Mode, 1, 4> {};
641 class LengthBits: public BitField<int, 5, 4> {};
642 // Ensure data fits within available bits. 611 // Ensure data fits within available bits.
643 STATIC_ASSERT(LAST_ALLOCATION_SITE_MODE == 1);
644 STATIC_ASSERT(kFastCloneModeCount < 16);
645 STATIC_ASSERT(kMaximumClonedLength < 16);
646 Major MajorKey() { return FastCloneShallowArray; } 612 Major MajorKey() { return FastCloneShallowArray; }
647 int NotMissMinorKey() { 613 int NotMissMinorKey() {
648 return AllocationSiteModeBits::encode(allocation_site_mode_) 614 return AllocationSiteModeBits::encode(allocation_site_mode_);
649 | ModeBits::encode(mode_)
650 | LengthBits::encode(length_);
651 } 615 }
652 }; 616 };
653 617
654 618
655 class FastCloneShallowObjectStub : public HydrogenCodeStub { 619 class FastCloneShallowObjectStub : public HydrogenCodeStub {
656 public: 620 public:
657 // Maximum number of properties in copied object. 621 // Maximum number of properties in copied object.
658 static const int kMaximumClonedProperties = 6; 622 static const int kMaximumClonedProperties = 6;
659 623
660 FastCloneShallowObjectStub(Isolate* isolate, int length) 624 FastCloneShallowObjectStub(Isolate* isolate, int length)
(...skipping 1882 matching lines...) Expand 10 before | Expand all | Expand 10 after
2543 2507
2544 2508
2545 class CallDescriptors { 2509 class CallDescriptors {
2546 public: 2510 public:
2547 static void InitializeForIsolate(Isolate* isolate); 2511 static void InitializeForIsolate(Isolate* isolate);
2548 }; 2512 };
2549 2513
2550 } } // namespace v8::internal 2514 } } // namespace v8::internal
2551 2515
2552 #endif // V8_CODE_STUBS_H_ 2516 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/arm64/full-codegen-arm64.cc ('k') | src/code-stubs.cc » ('j') | src/hydrogen.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698