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

Side by Side Diff: src/ic/ic.h

Issue 894683003: Introduce LanguageMode, drop StrictMode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebased (w/ conflicts) Created 5 years, 10 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
« no previous file with comments | « src/ic/ia32/ic-ia32.cc ('k') | src/ic/ic.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 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_IC_H_ 5 #ifndef V8_IC_H_
6 #define V8_IC_H_ 6 #define V8_IC_H_
7 7
8 #include "src/ic/ic-state.h" 8 #include "src/ic/ic-state.h"
9 #include "src/macro-assembler.h" 9 #include "src/macro-assembler.h"
10 10
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 private: 513 private:
514 static void Clear(Isolate* isolate, Address address, Code* target, 514 static void Clear(Isolate* isolate, Address address, Code* target,
515 ConstantPoolArray* constant_pool); 515 ConstantPoolArray* constant_pool);
516 516
517 friend class IC; 517 friend class IC;
518 }; 518 };
519 519
520 520
521 class StoreIC : public IC { 521 class StoreIC : public IC {
522 public: 522 public:
523 class StrictModeState : public BitField<StrictMode, 1, 1> {}; 523 STATIC_ASSERT(i::LANGUAGE_END == 2);
524 static ExtraICState ComputeExtraICState(StrictMode flag) { 524 class LanguageModeState : public BitField<LanguageMode, 1, 1> {};
525 return StrictModeState::encode(flag); 525 static ExtraICState ComputeExtraICState(LanguageMode flag) {
526 return LanguageModeState::encode(flag);
526 } 527 }
527 static StrictMode GetStrictMode(ExtraICState state) { 528 static LanguageMode GetLanguageMode(ExtraICState state) {
528 return StrictModeState::decode(state); 529 return LanguageModeState::decode(state);
529 } 530 }
530 531
531 // For convenience, a statically declared encoding of strict mode extra 532 // For convenience, a statically declared encoding of strict mode extra
532 // IC state. 533 // IC state.
533 static const ExtraICState kStrictModeState = 1 << StrictModeState::kShift; 534 static const ExtraICState kStrictModeState = STRICT
535 << LanguageModeState::kShift;
534 536
535 StoreIC(FrameDepth depth, Isolate* isolate) : IC(depth, isolate) { 537 StoreIC(FrameDepth depth, Isolate* isolate) : IC(depth, isolate) {
536 DCHECK(IsStoreStub()); 538 DCHECK(IsStoreStub());
537 } 539 }
538 540
539 StrictMode strict_mode() const { 541 LanguageMode language_mode() const {
540 return StrictModeState::decode(extra_ic_state()); 542 return LanguageModeState::decode(extra_ic_state());
541 } 543 }
542 544
543 // Code generators for stub routines. Only called once at startup. 545 // Code generators for stub routines. Only called once at startup.
544 static void GenerateSlow(MacroAssembler* masm); 546 static void GenerateSlow(MacroAssembler* masm);
545 static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); } 547 static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
546 static void GeneratePreMonomorphic(MacroAssembler* masm) { 548 static void GeneratePreMonomorphic(MacroAssembler* masm) {
547 GenerateMiss(masm); 549 GenerateMiss(masm);
548 } 550 }
549 static void GenerateMiss(MacroAssembler* masm); 551 static void GenerateMiss(MacroAssembler* masm);
550 static void GenerateMegamorphic(MacroAssembler* masm); 552 static void GenerateMegamorphic(MacroAssembler* masm);
551 static void GenerateNormal(MacroAssembler* masm); 553 static void GenerateNormal(MacroAssembler* masm);
552 static void GenerateRuntimeSetProperty(MacroAssembler* masm, 554 static void GenerateRuntimeSetProperty(MacroAssembler* masm,
553 StrictMode strict_mode); 555 LanguageMode language_mode);
554 556
555 static Handle<Code> initialize_stub(Isolate* isolate, StrictMode strict_mode); 557 static Handle<Code> initialize_stub(Isolate* isolate,
558 LanguageMode language_mode);
556 559
557 MUST_USE_RESULT MaybeHandle<Object> Store( 560 MUST_USE_RESULT MaybeHandle<Object> Store(
558 Handle<Object> object, Handle<Name> name, Handle<Object> value, 561 Handle<Object> object, Handle<Name> name, Handle<Object> value,
559 JSReceiver::StoreFromKeyed store_mode = 562 JSReceiver::StoreFromKeyed store_mode =
560 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED); 563 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED);
561 564
562 bool LookupForWrite(LookupIterator* it, Handle<Object> value, 565 bool LookupForWrite(LookupIterator* it, Handle<Object> value,
563 JSReceiver::StoreFromKeyed store_mode); 566 JSReceiver::StoreFromKeyed store_mode);
564 567
565 protected: 568 protected:
566 // Stub accessors. 569 // Stub accessors.
567 Handle<Code> megamorphic_stub() OVERRIDE; 570 Handle<Code> megamorphic_stub() OVERRIDE;
568 Handle<Code> slow_stub() const; 571 Handle<Code> slow_stub() const;
569 572
570 virtual Handle<Code> pre_monomorphic_stub() const { 573 virtual Handle<Code> pre_monomorphic_stub() const {
571 return pre_monomorphic_stub(isolate(), strict_mode()); 574 return pre_monomorphic_stub(isolate(), language_mode());
572 } 575 }
573 576
574 static Handle<Code> pre_monomorphic_stub(Isolate* isolate, 577 static Handle<Code> pre_monomorphic_stub(Isolate* isolate,
575 StrictMode strict_mode); 578 LanguageMode language_mode);
576 579
577 // Update the inline cache and the global stub cache based on the 580 // Update the inline cache and the global stub cache based on the
578 // lookup result. 581 // lookup result.
579 void UpdateCaches(LookupIterator* lookup, Handle<Object> value, 582 void UpdateCaches(LookupIterator* lookup, Handle<Object> value,
580 JSReceiver::StoreFromKeyed store_mode); 583 JSReceiver::StoreFromKeyed store_mode);
581 virtual Handle<Code> CompileHandler(LookupIterator* lookup, 584 virtual Handle<Code> CompileHandler(LookupIterator* lookup,
582 Handle<Object> value, 585 Handle<Object> value,
583 CacheHolderFlag cache_holder) OVERRIDE; 586 CacheHolderFlag cache_holder) OVERRIDE;
584 587
585 private: 588 private:
(...skipping 14 matching lines...) Expand all
600 603
601 class KeyedStoreIC : public StoreIC { 604 class KeyedStoreIC : public StoreIC {
602 public: 605 public:
603 // ExtraICState bits (building on IC) 606 // ExtraICState bits (building on IC)
604 // ExtraICState bits 607 // ExtraICState bits
605 class ExtraICStateKeyedAccessStoreMode 608 class ExtraICStateKeyedAccessStoreMode
606 : public BitField<KeyedAccessStoreMode, 2, 4> {}; // NOLINT 609 : public BitField<KeyedAccessStoreMode, 2, 4> {}; // NOLINT
607 610
608 class IcCheckTypeField : public BitField<IcCheckType, 6, 1> {}; 611 class IcCheckTypeField : public BitField<IcCheckType, 6, 1> {};
609 612
610 static ExtraICState ComputeExtraICState(StrictMode flag, 613 static ExtraICState ComputeExtraICState(LanguageMode flag,
611 KeyedAccessStoreMode mode) { 614 KeyedAccessStoreMode mode) {
612 return StrictModeState::encode(flag) | 615 return LanguageModeState::encode(flag) |
613 ExtraICStateKeyedAccessStoreMode::encode(mode) | 616 ExtraICStateKeyedAccessStoreMode::encode(mode) |
614 IcCheckTypeField::encode(ELEMENT); 617 IcCheckTypeField::encode(ELEMENT);
615 } 618 }
616 619
617 static KeyedAccessStoreMode GetKeyedAccessStoreMode( 620 static KeyedAccessStoreMode GetKeyedAccessStoreMode(
618 ExtraICState extra_state) { 621 ExtraICState extra_state) {
619 return ExtraICStateKeyedAccessStoreMode::decode(extra_state); 622 return ExtraICStateKeyedAccessStoreMode::decode(extra_state);
620 } 623 }
621 624
622 static IcCheckType GetKeyType(ExtraICState extra_state) { 625 static IcCheckType GetKeyType(ExtraICState extra_state) {
623 return IcCheckTypeField::decode(extra_state); 626 return IcCheckTypeField::decode(extra_state);
624 } 627 }
625 628
626 KeyedStoreIC(FrameDepth depth, Isolate* isolate) : StoreIC(depth, isolate) { 629 KeyedStoreIC(FrameDepth depth, Isolate* isolate) : StoreIC(depth, isolate) {
627 DCHECK(target()->is_keyed_store_stub()); 630 DCHECK(target()->is_keyed_store_stub());
628 } 631 }
629 632
630 MUST_USE_RESULT MaybeHandle<Object> Store(Handle<Object> object, 633 MUST_USE_RESULT MaybeHandle<Object> Store(Handle<Object> object,
631 Handle<Object> name, 634 Handle<Object> name,
632 Handle<Object> value); 635 Handle<Object> value);
633 636
634 // Code generators for stub routines. Only called once at startup. 637 // Code generators for stub routines. Only called once at startup.
635 static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); } 638 static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
636 static void GeneratePreMonomorphic(MacroAssembler* masm) { 639 static void GeneratePreMonomorphic(MacroAssembler* masm) {
637 GenerateMiss(masm); 640 GenerateMiss(masm);
638 } 641 }
639 static void GenerateMiss(MacroAssembler* masm); 642 static void GenerateMiss(MacroAssembler* masm);
640 static void GenerateSlow(MacroAssembler* masm); 643 static void GenerateSlow(MacroAssembler* masm);
641 static void GenerateMegamorphic(MacroAssembler* masm, StrictMode strict_mode); 644 static void GenerateMegamorphic(MacroAssembler* masm,
645 LanguageMode language_mode);
642 static void GenerateSloppyArguments(MacroAssembler* masm); 646 static void GenerateSloppyArguments(MacroAssembler* masm);
643 647
644 protected: 648 protected:
645 virtual Handle<Code> pre_monomorphic_stub() const { 649 virtual Handle<Code> pre_monomorphic_stub() const {
646 return pre_monomorphic_stub(isolate(), strict_mode()); 650 return pre_monomorphic_stub(isolate(), language_mode());
647 } 651 }
648 static Handle<Code> pre_monomorphic_stub(Isolate* isolate, 652 static Handle<Code> pre_monomorphic_stub(Isolate* isolate,
649 StrictMode strict_mode) { 653 LanguageMode language_mode) {
650 if (strict_mode == STRICT) { 654 if (is_strict(language_mode)) {
651 return isolate->builtins()->KeyedStoreIC_PreMonomorphic_Strict(); 655 return isolate->builtins()->KeyedStoreIC_PreMonomorphic_Strict();
652 } else { 656 } else {
653 return isolate->builtins()->KeyedStoreIC_PreMonomorphic(); 657 return isolate->builtins()->KeyedStoreIC_PreMonomorphic();
654 } 658 }
655 } 659 }
656 660
657 Handle<Code> StoreElementStub(Handle<JSObject> receiver, 661 Handle<Code> StoreElementStub(Handle<JSObject> receiver,
658 KeyedAccessStoreMode store_mode); 662 KeyedAccessStoreMode store_mode);
659 663
660 private: 664 private:
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 770
767 // Support functions for interceptor handlers. 771 // Support functions for interceptor handlers.
768 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly); 772 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly);
769 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor); 773 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor);
770 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor); 774 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor);
771 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor); 775 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor);
772 } 776 }
773 } // namespace v8::internal 777 } // namespace v8::internal
774 778
775 #endif // V8_IC_H_ 779 #endif // V8_IC_H_
OLDNEW
« no previous file with comments | « src/ic/ia32/ic-ia32.cc ('k') | src/ic/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698