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

Side by Side Diff: src/interface-descriptors.h

Issue 2002143002: [stubs] An easier way of defining a stub call interface descriptor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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/ia32/interface-descriptors-ia32.cc ('k') | src/interface-descriptors.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_CALL_INTERFACE_DESCRIPTOR_H_ 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_
6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/macro-assembler.h" 9 #include "src/macro-assembler.h"
10 10
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 102
103 void InitializePlatformIndependent(FunctionType* function_type) { 103 void InitializePlatformIndependent(FunctionType* function_type) {
104 function_type_ = function_type; 104 function_type_ = function_type;
105 } 105 }
106 106
107 // TODO(mvstanton): Instead of taking parallel arrays register and 107 // TODO(mvstanton): Instead of taking parallel arrays register and
108 // param_representations, how about a struct that puts the representation 108 // param_representations, how about a struct that puts the representation
109 // and register side by side (eg, RegRep(r1, Representation::Tagged()). 109 // and register side by side (eg, RegRep(r1, Representation::Tagged()).
110 // The same should go for the CodeStubDescriptor class. 110 // The same should go for the CodeStubDescriptor class.
111 void InitializePlatformSpecific( 111 void InitializePlatformSpecific(
112 int register_parameter_count, Register* registers, 112 int register_parameter_count, const Register* registers,
113 PlatformInterfaceDescriptor* platform_descriptor = NULL); 113 PlatformInterfaceDescriptor* platform_descriptor = NULL);
114 114
115 bool IsInitialized() const { return register_param_count_ >= 0; } 115 bool IsInitialized() const { return register_param_count_ >= 0; }
116 116
117 int param_count() const { return function_type_->Arity(); } 117 int param_count() const { return function_type_->Arity(); }
118 int register_param_count() const { return register_param_count_; } 118 int register_param_count() const { return register_param_count_; }
119 Register register_param(int index) const { return register_params_[index]; } 119 Register register_param(int index) const { return register_params_[index]; }
120 Register* register_params() const { return register_params_.get(); } 120 Register* register_params() const { return register_params_.get(); }
121 Type* param_type(int index) const { return function_type_->Parameter(index); } 121 Type* param_type(int index) const { return function_type_->Parameter(index); }
122 PlatformInterfaceDescriptor* platform_specific_descriptor() const { 122 PlatformInterfaceDescriptor* platform_specific_descriptor() const {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 if (!data()->IsInitialized()) { 211 if (!data()->IsInitialized()) {
212 CallInterfaceDescriptorData* d = isolate->call_descriptor_data(key); 212 CallInterfaceDescriptorData* d = isolate->call_descriptor_data(key);
213 DCHECK(d == data()); // d should be a modifiable pointer to data(). 213 DCHECK(d == data()); // d should be a modifiable pointer to data().
214 InitializePlatformSpecific(d); 214 InitializePlatformSpecific(d);
215 FunctionType* function_type = BuildCallInterfaceDescriptorFunctionType( 215 FunctionType* function_type = BuildCallInterfaceDescriptorFunctionType(
216 isolate, d->register_param_count()); 216 isolate, d->register_param_count());
217 d->InitializePlatformIndependent(function_type); 217 d->InitializePlatformIndependent(function_type);
218 } 218 }
219 } 219 }
220 220
221 // Initializes |data| using the platform dependent default set of registers.
222 // It is intended to be used for TurboFan stubs when particular set of
223 // registers does not matter.
224 static void DefaultInitializePlatformSpecific(
225 CallInterfaceDescriptorData* data, int register_parameter_count);
226
221 private: 227 private:
222 const CallInterfaceDescriptorData* data_; 228 const CallInterfaceDescriptorData* data_;
223 }; 229 };
224 230
225 #define DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ 231 #define DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
226 public: \ 232 public: \
227 explicit name(Isolate* isolate) : base(isolate, key()) { \ 233 explicit name(Isolate* isolate) : base(isolate, key()) { \
228 Initialize(isolate, key()); \ 234 Initialize(isolate, key()); \
229 } \ 235 } \
230 static inline CallDescriptors::Key key(); 236 static inline CallDescriptors::Key key();
231 237
238 #define DECLARE_DEFAULT_DESCRIPTOR(name, base, parameter_count) \
239 DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
240 protected: \
241 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \
242 override { \
243 DefaultInitializePlatformSpecific(data, parameter_count); \
244 } \
245 name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \
246 \
247 public:
248
232 #define DECLARE_DESCRIPTOR(name, base) \ 249 #define DECLARE_DESCRIPTOR(name, base) \
233 DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ 250 DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
234 protected: \ 251 protected: \
235 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override; \ 252 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override; \
236 name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \ 253 name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \
237 \ 254 \
238 public: 255 public:
239 256
240 #define DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(name, base) \ 257 #define DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(name, base) \
241 DECLARE_DESCRIPTOR(name, base) \ 258 DECLARE_DESCRIPTOR(name, base) \
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 434
418 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) 435 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor)
419 436
420 static const Register ArgumentRegister(); 437 static const Register ArgumentRegister();
421 }; 438 };
422 439
423 class HasPropertyDescriptor final : public CallInterfaceDescriptor { 440 class HasPropertyDescriptor final : public CallInterfaceDescriptor {
424 public: 441 public:
425 enum ParameterIndices { kKeyIndex, kObjectIndex }; 442 enum ParameterIndices { kKeyIndex, kObjectIndex };
426 443
427 DECLARE_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor) 444 DECLARE_DEFAULT_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor, 2)
428
429 static const Register KeyRegister();
430 static const Register ObjectRegister();
431 }; 445 };
432 446
433 class TypeofDescriptor : public CallInterfaceDescriptor { 447 class TypeofDescriptor : public CallInterfaceDescriptor {
434 public: 448 public:
435 DECLARE_DESCRIPTOR(TypeofDescriptor, CallInterfaceDescriptor) 449 DECLARE_DESCRIPTOR(TypeofDescriptor, CallInterfaceDescriptor)
436 }; 450 };
437 451
438 452
439 class FastCloneRegExpDescriptor : public CallInterfaceDescriptor { 453 class FastCloneRegExpDescriptor : public CallInterfaceDescriptor {
440 public: 454 public:
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 } // namespace v8 857 } // namespace v8
844 858
845 859
846 #if V8_TARGET_ARCH_ARM64 860 #if V8_TARGET_ARCH_ARM64
847 #include "src/arm64/interface-descriptors-arm64.h" 861 #include "src/arm64/interface-descriptors-arm64.h"
848 #elif V8_TARGET_ARCH_ARM 862 #elif V8_TARGET_ARCH_ARM
849 #include "src/arm/interface-descriptors-arm.h" 863 #include "src/arm/interface-descriptors-arm.h"
850 #endif 864 #endif
851 865
852 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ 866 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_
OLDNEW
« no previous file with comments | « src/ia32/interface-descriptors-ia32.cc ('k') | src/interface-descriptors.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698