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

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

Issue 442763002: Load constants from the DescriptorArray (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Also removed from arm64 Created 6 years, 4 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 | « src/arm64/stub-cache-arm64.cc ('k') | src/code-stubs.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_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 "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assembler.h" 9 #include "src/assembler.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 V(StoreArrayLiteralElement) \ 69 V(StoreArrayLiteralElement) \
70 V(StubFailureTrampoline) \ 70 V(StubFailureTrampoline) \
71 V(ArrayConstructor) \ 71 V(ArrayConstructor) \
72 V(InternalArrayConstructor) \ 72 V(InternalArrayConstructor) \
73 V(ProfileEntryHook) \ 73 V(ProfileEntryHook) \
74 V(StoreGlobal) \ 74 V(StoreGlobal) \
75 V(CallApiFunction) \ 75 V(CallApiFunction) \
76 V(CallApiGetter) \ 76 V(CallApiGetter) \
77 /* IC Handler stubs */ \ 77 /* IC Handler stubs */ \
78 V(LoadField) \ 78 V(LoadField) \
79 V(LoadConstant) \
79 V(StringLength) 80 V(StringLength)
80 81
81 // List of code stubs only used on ARM 32 bits platforms. 82 // List of code stubs only used on ARM 32 bits platforms.
82 #if V8_TARGET_ARCH_ARM 83 #if V8_TARGET_ARCH_ARM
83 #define CODE_STUB_LIST_ARM(V) \ 84 #define CODE_STUB_LIST_ARM(V) \
84 V(GetProperty) \ 85 V(GetProperty) \
85 V(SetProperty) \ 86 V(SetProperty) \
86 V(InvokeBuiltin) \ 87 V(InvokeBuiltin) \
87 V(DirectCEntry) 88 V(DirectCEntry)
88 #else 89 #else
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 virtual int MinorKey() const { return 0; } 897 virtual int MinorKey() const { return 0; }
897 }; 898 };
898 899
899 900
900 class HandlerStub : public HydrogenCodeStub { 901 class HandlerStub : public HydrogenCodeStub {
901 public: 902 public:
902 virtual Code::Kind GetCodeKind() const { return Code::HANDLER; } 903 virtual Code::Kind GetCodeKind() const { return Code::HANDLER; }
903 virtual ExtraICState GetExtraICState() const { return kind(); } 904 virtual ExtraICState GetExtraICState() const { return kind(); }
904 virtual InlineCacheState GetICState() { return MONOMORPHIC; } 905 virtual InlineCacheState GetICState() { return MONOMORPHIC; }
905 906
907 virtual void InitializeInterfaceDescriptor(
908 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
909
906 protected: 910 protected:
907 explicit HandlerStub(Isolate* isolate) 911 explicit HandlerStub(Isolate* isolate)
908 : HydrogenCodeStub(isolate), bit_field_(0) {} 912 : HydrogenCodeStub(isolate), bit_field_(0) {}
909 virtual int NotMissMinorKey() const { return bit_field_; } 913 virtual int NotMissMinorKey() const { return bit_field_; }
910 virtual Code::Kind kind() const = 0; 914 virtual Code::Kind kind() const = 0;
911 int bit_field_; 915 int bit_field_;
912 }; 916 };
913 917
914 918
915 class LoadFieldStub: public HandlerStub { 919 class LoadFieldStub: public HandlerStub {
916 public: 920 public:
917 LoadFieldStub(Isolate* isolate, FieldIndex index) 921 LoadFieldStub(Isolate* isolate, FieldIndex index)
918 : HandlerStub(isolate), index_(index) { 922 : HandlerStub(isolate), index_(index) {
919 int property_index_key = index_.GetLoadFieldStubKey(); 923 int property_index_key = index_.GetLoadFieldStubKey();
920 bit_field_ = EncodedLoadFieldByIndexBits::encode(property_index_key); 924 bit_field_ = EncodedLoadFieldByIndexBits::encode(property_index_key);
921 } 925 }
922 926
923 virtual Handle<Code> GenerateCode() V8_OVERRIDE; 927 virtual Handle<Code> GenerateCode() V8_OVERRIDE;
924 928
925 virtual void InitializeInterfaceDescriptor(
926 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
927
928 Representation representation() { 929 Representation representation() {
929 if (unboxed_double()) return Representation::Double(); 930 if (unboxed_double()) return Representation::Double();
930 return Representation::Tagged(); 931 return Representation::Tagged();
931 } 932 }
932 933
933 FieldIndex index() const { return index_; } 934 FieldIndex index() const { return index_; }
934 bool unboxed_double() { return index_.is_double(); } 935 bool unboxed_double() { return index_.is_double(); }
935 936
936 protected: 937 protected:
937 explicit LoadFieldStub(Isolate* isolate); 938 explicit LoadFieldStub(Isolate* isolate);
938 virtual Code::Kind kind() const { return Code::LOAD_IC; } 939 virtual Code::Kind kind() const { return Code::LOAD_IC; }
939 virtual Code::StubType GetStubType() { return Code::FAST; } 940 virtual Code::StubType GetStubType() { return Code::FAST; }
940 941
941 private: 942 private:
942 class EncodedLoadFieldByIndexBits : public BitField<int, 0, 13> {}; 943 class EncodedLoadFieldByIndexBits : public BitField<int, 0, 13> {};
943 virtual CodeStub::Major MajorKey() const { return LoadField; } 944 virtual CodeStub::Major MajorKey() const { return LoadField; }
944 FieldIndex index_; 945 FieldIndex index_;
945 }; 946 };
946 947
947 948
949 class LoadConstantStub : public HandlerStub {
950 public:
951 LoadConstantStub(Isolate* isolate, int descriptor) : HandlerStub(isolate) {
952 bit_field_ = descriptor;
953 }
954
955 virtual Handle<Code> GenerateCode() V8_OVERRIDE;
956
957 int descriptor() const { return bit_field_; }
958
959 protected:
960 explicit LoadConstantStub(Isolate* isolate);
961 virtual Code::Kind kind() const { return Code::LOAD_IC; }
962 virtual Code::StubType GetStubType() { return Code::FAST; }
963
964 private:
965 virtual CodeStub::Major MajorKey() const { return LoadConstant; }
966 };
967
968
948 class StringLengthStub: public HandlerStub { 969 class StringLengthStub: public HandlerStub {
949 public: 970 public:
950 explicit StringLengthStub(Isolate* isolate) : HandlerStub(isolate) {} 971 explicit StringLengthStub(Isolate* isolate) : HandlerStub(isolate) {}
951 virtual Handle<Code> GenerateCode() V8_OVERRIDE; 972 virtual Handle<Code> GenerateCode() V8_OVERRIDE;
952 virtual void InitializeInterfaceDescriptor(
953 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
954 973
955 protected: 974 protected:
956 virtual Code::Kind kind() const { return Code::LOAD_IC; } 975 virtual Code::Kind kind() const { return Code::LOAD_IC; }
957 virtual Code::StubType GetStubType() { return Code::FAST; } 976 virtual Code::StubType GetStubType() { return Code::FAST; }
958 977
959 private: 978 private:
960 virtual CodeStub::Major MajorKey() const { return StringLength; } 979 virtual CodeStub::Major MajorKey() const { return StringLength; }
961 }; 980 };
962 981
963 982
(...skipping 21 matching lines...) Expand all
985 Code::FindAndReplacePattern pattern; 1004 Code::FindAndReplacePattern pattern;
986 pattern.Add(isolate()->factory()->global_property_cell_map(), cell); 1005 pattern.Add(isolate()->factory()->global_property_cell_map(), cell);
987 return CodeStub::GetCodeCopy(pattern); 1006 return CodeStub::GetCodeCopy(pattern);
988 } 1007 }
989 } 1008 }
990 1009
991 virtual Code::Kind kind() const { return Code::STORE_IC; } 1010 virtual Code::Kind kind() const { return Code::STORE_IC; }
992 1011
993 virtual Handle<Code> GenerateCode() V8_OVERRIDE; 1012 virtual Handle<Code> GenerateCode() V8_OVERRIDE;
994 1013
995 virtual void InitializeInterfaceDescriptor(
996 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
997
998 bool is_constant() const { 1014 bool is_constant() const {
999 return IsConstantBits::decode(bit_field_); 1015 return IsConstantBits::decode(bit_field_);
1000 } 1016 }
1001 bool check_global() const { 1017 bool check_global() const {
1002 return CheckGlobalBits::decode(bit_field_); 1018 return CheckGlobalBits::decode(bit_field_);
1003 } 1019 }
1004 void set_is_constant(bool value) { 1020 void set_is_constant(bool value) {
1005 bit_field_ = IsConstantBits::update(bit_field_, value); 1021 bit_field_ = IsConstantBits::update(bit_field_, value);
1006 } 1022 }
1007 1023
(...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after
2468 2484
2469 2485
2470 class CallDescriptors { 2486 class CallDescriptors {
2471 public: 2487 public:
2472 static void InitializeForIsolate(Isolate* isolate); 2488 static void InitializeForIsolate(Isolate* isolate);
2473 }; 2489 };
2474 2490
2475 } } // namespace v8::internal 2491 } } // namespace v8::internal
2476 2492
2477 #endif // V8_CODE_STUBS_H_ 2493 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/arm64/stub-cache-arm64.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698