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_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/code-stub-assembler.h" | 10 #include "src/code-stub-assembler.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 V(StoreScriptContextField) \ | 119 V(StoreScriptContextField) \ |
120 V(NumberToString) \ | 120 V(NumberToString) \ |
121 V(StringAdd) \ | 121 V(StringAdd) \ |
122 V(GetProperty) \ | 122 V(GetProperty) \ |
123 V(LoadIC) \ | 123 V(LoadIC) \ |
124 V(KeyedLoadICTF) \ | 124 V(KeyedLoadICTF) \ |
125 V(StoreFastElement) \ | 125 V(StoreFastElement) \ |
126 V(StoreField) \ | 126 V(StoreField) \ |
127 V(StoreGlobal) \ | 127 V(StoreGlobal) \ |
128 V(StoreIC) \ | 128 V(StoreIC) \ |
| 129 V(KeyedStoreICTF) \ |
129 V(StoreInterceptor) \ | 130 V(StoreInterceptor) \ |
130 V(StoreMap) \ | 131 V(StoreMap) \ |
131 V(StoreTransition) \ | 132 V(StoreTransition) \ |
132 V(LoadApiGetter) \ | 133 V(LoadApiGetter) \ |
133 V(LoadIndexedInterceptor) \ | 134 V(LoadIndexedInterceptor) \ |
134 V(GrowArrayElements) \ | 135 V(GrowArrayElements) \ |
135 /* These are only called from FGC and */ \ | 136 /* These are only called from FGC and */ \ |
136 /* can be removed when we use ignition */ \ | 137 /* can be removed when we use ignition */ \ |
137 /* only */ \ | 138 /* only */ \ |
138 V(LoadICTrampoline) \ | 139 V(LoadICTrampoline) \ |
139 V(LoadGlobalICTrampoline) \ | 140 V(LoadGlobalICTrampoline) \ |
140 V(KeyedLoadICTrampolineTF) \ | 141 V(KeyedLoadICTrampolineTF) \ |
141 V(StoreICTrampoline) | 142 V(StoreICTrampoline) \ |
| 143 V(KeyedStoreICTrampolineTF) |
142 | 144 |
143 // List of code stubs only used on ARM 32 bits platforms. | 145 // List of code stubs only used on ARM 32 bits platforms. |
144 #if V8_TARGET_ARCH_ARM | 146 #if V8_TARGET_ARCH_ARM |
145 #define CODE_STUB_LIST_ARM(V) V(DirectCEntry) | 147 #define CODE_STUB_LIST_ARM(V) V(DirectCEntry) |
146 | 148 |
147 #else | 149 #else |
148 #define CODE_STUB_LIST_ARM(V) | 150 #define CODE_STUB_LIST_ARM(V) |
149 #endif | 151 #endif |
150 | 152 |
151 // List of code stubs only used on ARM 64 bits platforms. | 153 // List of code stubs only used on ARM 64 bits platforms. |
(...skipping 1918 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2070 } | 2072 } |
2071 | 2073 |
2072 protected: | 2074 protected: |
2073 StoreICState state() const { return StoreICState(GetExtraICState()); } | 2075 StoreICState state() const { return StoreICState(GetExtraICState()); } |
2074 | 2076 |
2075 private: | 2077 private: |
2076 DEFINE_CALL_INTERFACE_DESCRIPTOR(Store); | 2078 DEFINE_CALL_INTERFACE_DESCRIPTOR(Store); |
2077 DEFINE_PLATFORM_CODE_STUB(KeyedStoreICTrampoline, PlatformCodeStub); | 2079 DEFINE_PLATFORM_CODE_STUB(KeyedStoreICTrampoline, PlatformCodeStub); |
2078 }; | 2080 }; |
2079 | 2081 |
| 2082 class KeyedStoreICTrampolineTFStub : public StoreICTrampolineStub { |
| 2083 public: |
| 2084 KeyedStoreICTrampolineTFStub(Isolate* isolate, const StoreICState& state) |
| 2085 : StoreICTrampolineStub(isolate, state) {} |
| 2086 |
| 2087 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
| 2088 |
| 2089 Code::Kind GetCodeKind() const override { return Code::KEYED_STORE_IC; } |
| 2090 |
| 2091 DEFINE_CODE_STUB(KeyedStoreICTrampolineTF, StoreICTrampolineStub); |
| 2092 }; |
2080 | 2093 |
2081 class CallICTrampolineStub : public PlatformCodeStub { | 2094 class CallICTrampolineStub : public PlatformCodeStub { |
2082 public: | 2095 public: |
2083 CallICTrampolineStub(Isolate* isolate, const CallICState& state) | 2096 CallICTrampolineStub(Isolate* isolate, const CallICState& state) |
2084 : PlatformCodeStub(isolate) { | 2097 : PlatformCodeStub(isolate) { |
2085 minor_key_ = state.GetExtraICState(); | 2098 minor_key_ = state.GetExtraICState(); |
2086 } | 2099 } |
2087 | 2100 |
2088 Code::Kind GetCodeKind() const override { return Code::CALL_IC; } | 2101 Code::Kind GetCodeKind() const override { return Code::CALL_IC; } |
2089 | 2102 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2175 return static_cast<ExtraICState>(minor_key_); | 2188 return static_cast<ExtraICState>(minor_key_); |
2176 } | 2189 } |
2177 | 2190 |
2178 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); | 2191 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); |
2179 DEFINE_PLATFORM_CODE_STUB(KeyedStoreIC, PlatformCodeStub); | 2192 DEFINE_PLATFORM_CODE_STUB(KeyedStoreIC, PlatformCodeStub); |
2180 | 2193 |
2181 protected: | 2194 protected: |
2182 void GenerateImpl(MacroAssembler* masm, bool in_frame); | 2195 void GenerateImpl(MacroAssembler* masm, bool in_frame); |
2183 }; | 2196 }; |
2184 | 2197 |
| 2198 class KeyedStoreICTFStub : public StoreICStub { |
| 2199 public: |
| 2200 KeyedStoreICTFStub(Isolate* isolate, const StoreICState& state) |
| 2201 : StoreICStub(isolate, state) {} |
| 2202 |
| 2203 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
| 2204 |
| 2205 Code::Kind GetCodeKind() const override { return Code::KEYED_STORE_IC; } |
| 2206 |
| 2207 DEFINE_CODE_STUB(KeyedStoreICTF, StoreICStub); |
| 2208 }; |
2185 | 2209 |
2186 class DoubleToIStub : public PlatformCodeStub { | 2210 class DoubleToIStub : public PlatformCodeStub { |
2187 public: | 2211 public: |
2188 DoubleToIStub(Isolate* isolate, Register source, Register destination, | 2212 DoubleToIStub(Isolate* isolate, Register source, Register destination, |
2189 int offset, bool is_truncating, bool skip_fastpath = false) | 2213 int offset, bool is_truncating, bool skip_fastpath = false) |
2190 : PlatformCodeStub(isolate) { | 2214 : PlatformCodeStub(isolate) { |
2191 minor_key_ = SourceRegisterBits::encode(source.code()) | | 2215 minor_key_ = SourceRegisterBits::encode(source.code()) | |
2192 DestinationRegisterBits::encode(destination.code()) | | 2216 DestinationRegisterBits::encode(destination.code()) | |
2193 OffsetBits::encode(offset) | | 2217 OffsetBits::encode(offset) | |
2194 IsTruncatingBits::encode(is_truncating) | | 2218 IsTruncatingBits::encode(is_truncating) | |
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2748 #undef DEFINE_HYDROGEN_CODE_STUB | 2772 #undef DEFINE_HYDROGEN_CODE_STUB |
2749 #undef DEFINE_CODE_STUB | 2773 #undef DEFINE_CODE_STUB |
2750 #undef DEFINE_CODE_STUB_BASE | 2774 #undef DEFINE_CODE_STUB_BASE |
2751 | 2775 |
2752 extern Representation RepresentationFromMachineType(MachineType type); | 2776 extern Representation RepresentationFromMachineType(MachineType type); |
2753 | 2777 |
2754 } // namespace internal | 2778 } // namespace internal |
2755 } // namespace v8 | 2779 } // namespace v8 |
2756 | 2780 |
2757 #endif // V8_CODE_STUBS_H_ | 2781 #endif // V8_CODE_STUBS_H_ |
OLD | NEW |